深入浅出理解机器学习算法—神经网络(前向传播)

本文探讨了神经网络如何处理大量特征,通过工人的流水线比喻介绍模型结构。重点介绍了权重、激活函数和多层神经网络的表示,包括输入、隐藏和输出层。还提到向量化实现和前向传播过程,并对比了逻辑回归与神经网络的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、神经网络表述

我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。

那特征能有多大呢?下面是一个计算机视觉中的例子:

在这里插入图片描述
如上图所示,如果选取一小块50∗5050*505050像素的灰度图片(一个像素只有亮度一个值),选择每个像素点作为特征,则特征总量n=2500n=2500n=2500,换算成RGB,一个像素有三个值,则n=7500n=7500n=7500,如果将其两两组合成新特征,则特征数量为C25002=2500!2≈3  millonC_{2500}^2=\frac{2500!}{2}\approx 3\;millonC25002=22500!3millon

普通的逻辑回归模型,不能有效的处理这么多的特征,所以需要神经网络算法。

二、模型表示1

先看一下大脑的神经元长什么样:

在这里插入图片描述
想象一下印刷厂中流水线的工人,每个工人都有特定的任务,比如装订,塑封,贴防伪标识等等,工人们看到书本并处理完自己的任务后,就回放回传送带,紧接着传送带就传给下一个环节的工人,如此不断重复从而完成一个又一个环节,直到一本书印制完成。

那么类比一下,把上图中的细胞核类比成工人,轴突类比传送带,树突则比类比成工人的双眼。一个又一个细胞体,从树突接收需要处理的信息,对其进行处理后,再经由轴突通过电信号把处理完的信息传递出去,直到理解信息的内容。

人工神经网络中,树突对应输入(input),细胞核对应激活单元(activation unit),轴突对应输出(output)

我们一般把神经网络划分为三部分(注意,不是只有三层!),即输入层(input layer)隐藏层(hidden layer)输出层(output layer)

具体如下图所示:

图中的一个圈表示神经网络中的一个激活单元,输入层对应输入单元,隐藏层对应中间单元,输出层则对应输出单元。

中间激活单元应用激活函数(activation_function)处理数据。

下面列出一些已有概念在神经网络中的别称:

  1. x0x_0x0:偏置单元,x0=1x_0=1x0=1
  2. Θ\ThetaΘ:权重,即参数;
  3. 激活函数:ggg,即逻辑函数等;
  4. 输入层: 对应于训练集中的特征xxx
  5. 输出层: 对应于训练集中的结果yyy
  6. ai(j)a_i^{(j)}ai(j):第jjj层第iii个激活单元;
  7. Θ(j)\Theta^{(j)}Θ(j):从第jjj层映射到第j+1j+1j+1层时的权重矩阵;
  8. Θv,μ(j)\Theta_{v,\mu}^{(j)}Θv,μ(j):从第jjj层的第μ\muμ个单元映射到第j+1j+1j+1层的第vvv个单元的权重;
  9. sjs_jsj:第jjj层的激活单元数目(不包含偏置单元)。

每个单元会作用于下一层的所有单元(矩阵乘法运算)。

如果第jjj层有sjs_jsj个单元,第j+1j+1j+1层有sj+1s_{j+1}sj+1个单元, 则Θj\Theta_jΘj是一个sj+1∗(sj+1)s_{j+1}*(s_j+1)sj+1(sj+1)维的权重矩阵。即每一层的权重矩阵大小都是非固定的。

其中,+1+1+1来自于偏置单元,这样意味着输出层不包含偏置单元,输入层和隐藏层需要添加偏置单元。

依据本节所给模型,有:

size(Θ(1))=sj+1∗(sj+1)=s2∗(s1+1)=3×4size(\Theta^{(1)})=s_{j+1}*(s_j+1)=s_2*(s_1+1)=3\times 4size(Θ(1))=sj+1(sj+1)=s2(s1+1)=3×4

size(Θ(2)=sj+1∗(sj+1)=s3∗(s2+1)=1×4size(\Theta^{(2)}=s_{j+1}*(s_j+1)=s_3*(s_2+1)=1\times 4size(Θ(2)=sj+1(sj+1)=s3(s2+1)=1×4

三、模型表示2

对输入层的所有激活单元应用激活函数,从而得到隐藏层中激活单元的值:
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3) a_1^{(2)}=g(\Theta_{10}^{(1)}x_0+\Theta_{11}^{(1)}x_1+\Theta_{12}^{(1)}x_2+\Theta_{13}^{(1)}x_3) a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3) a_2^{(2)}=g(\Theta_{20}^{(1)}x_0+\Theta_{21}^{(1)}x_1+\Theta_{22}^{(1)}x_2+\Theta_{23}^{(1)}x_3) a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3) a_3^{(2)}=g(\Theta_{30}^{(1)}x_0+\Theta_{31}^{(1)}x_1+\Theta_{32}^{(1)}x_2+\Theta_{33}^{(1)}x_3) a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
对 Layer 2中的所有激活单元应用激活函数,从而得到输出:
hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2)) h_{\Theta}(x)=g(\Theta_{10}^{(2)}a_0^{(2)}+\Theta_{11}^{(2)}a_1^{(2)}+\Theta_{12}^{(2)}a_2^{(2)}+\Theta_{13}^{(2)}a_3^{(2)}) hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
上面的计算过程被称为前向传播(Forward propagation),即从输入层开始,一层一层地向下计算并传递结果。

再回顾一下逻辑回归:
hθ(x)=g(θ0+θ1x1+θ2x2+θ3x3) h_{\theta}(x)=g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3) hθ(x)=g(θ0+θ1x1+θ2x2+θ3x3)
是不是除了符号表示,其他都完全一样?

其实神经网络就好似回归模型,只不过输入变成了中间单元a1(j)  ,  a2(j)  ,  ⋯  ,  an(j)a_1^{(j)}\;,\;a_2^{(j)}\;,\;\cdots\;,\;a_n^{(j)}a1(j),a2(j),,an(j)。从输入xxx开始,下一层的每个激活单元都包含了上一层的所有信息(单元值),通过最优化算法不断迭代计算,激活单元能得出关于输入xxx的更多信息,这就好像是在给假设函数加多项式。隐藏层的这些单元好似升级版的初始特征,从而能给出更好的预测。

向量化实现

a(1)=x={x0x1x2x3} a^{(1)}=x=\left\{ \begin{matrix*} x_0 \\ x_1 \\ x_2 \\ x_3 \end{matrix*} \right\} a(1)=x=x0x1x2x3
Θ(1)={Θ10(1)Θ11(1)Θ12(1)Θ13(1)Θ20(1)Θ21(1)Θ22(1)Θ23(1)Θ30(1)Θ31(1)Θ32(1)Θ33(1)} \Theta^{(1)}=\left\{ \begin{matrix} \Theta_{10}^{(1)} & \Theta_{11}^{(1)} & \Theta_{12}^{(1)} & \Theta_{13}^{(1)} \\ \Theta_{20}^{(1)} & \Theta_{21}^{(1)} & \Theta_{22}^{(1)} & \Theta_{23}^{(1)} \\ \Theta_{30}^{(1)} & \Theta_{31}^{(1)} & \Theta_{32}^{(1)} & \Theta_{33}^{(1)} \end{matrix} \right\} Θ(1)=Θ10(1)Θ20(1)Θ30(1)Θ11(1)Θ21(1)Θ31(1)Θ12(1)Θ22(1)Θ32(1)Θ13(1)Θ23(1)Θ33(1)
a1(2)=g(z1(2))  ,  a2(2)=g(z2(2))  ,  a3(2)=g(z3(2)) a_1^{(2)}=g(z_1^{(2)})\;,\;a_2^{(2)}=g(z_2^{(2)})\;,\;a_3^{(2) }=g(z_3^{(2)}) a1(2)=g(z1(2)),a2(2)=g(z2(2)),a3(2)=g(z3(2))
z(2)={z1(2)z2(2)z3(2)} z^{(2)}=\left\{ \begin{matrix} z_1^{(2)}\\ z_2^{(2)}\\ z_3^{(2)} \end{matrix} \right\} z(2)=z1(2)z2(2)z3(2)
则有a(2)=g(Θ(1)a(1))=g(z(2))a^{(2)}=g(\Theta^{(1)}a^{(1)})=g(z^{(2)})a(2)=g(Θ(1)a(1))=g(z(2))

预测结果为:
hΘ(x)=a(3)=g(Θ(2)a(2))=g(z(3)) h_{\Theta}(x)=a^{(3)}=g(\Theta^{(2)}a^{(2)})=g(z^{(3)}) hΘ(x)=a(3)=g(Θ(2)a(2))=g(z(3))
则有:
zi(j)=Θi,0(j−1)a0(j−1)+Θi,1(j−1)a0(j−1)+⋯+Θi,n(j−1)an(j−1) z_i^{(j)}=\Theta_{i,0}^{(j-1)}a_0^{(j-1)}+\Theta_{i,1}^{(j-1)}a_0^{(j-1)}+\cdots+\Theta_{i,n}^{(j-1)}a_n^{(j-1)} zi(j)=Θi,0(j1)a0(j1)+Θi,1(j1)a0(j1)++Θi,n(j1)an(j1)
z(j)=Θ(j−1)a(j−1)  ,  a(j)=g(z(j)) z^{(j)}=\Theta^{(j-1)}a^{(j-1)}\;,\;a^{(j)}=g(z^{(j)}) z(j)=Θ(j1)a(j1),a(j)=g(z(j))
通过该式即可计算神经网络中每一层的值。

扩展到所有样本实例:
z(2)=Θ(1)XT z^{(2)}=\Theta^{(1)}X^T z(2)=Θ(1)XT
这时z(2)z^{(2)}z(2)是一个s2×ms_2\times ms2×m维的矩阵。

其中各个字母的代表意思维:
m:训练集中的样本实例数量 m:训练集中的样本实例数量 m:训练集中的样本实例数量
s2:第二层神经网络中激活单元的数量 s_2:第二层神经网络中激活单元的数量 s2:第二层神经网络中激活单元的数量

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅途中的宽~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值