背景介绍
反向传播算法是神经网络的一个关键步骤,通过反向传播算法,可以计算出假设函数对所有神经网络参数的偏导数。
神经网络算法的工作流程为:首先通过人工或其它算法确定特征 x \mathbf{x} x,并随机初始化所有神经网络参数;然后运用正向传播算法计算出神经网络的输出值;接下来运用反向传播算法计算输出值对所有参数的偏导数;最后运用梯度下降算法更新所有的神经网络参数。
符号定义
首先,对神经网络进行如下符号定义:
符号 | 意义 |
---|---|
L L L | 神经网络的总层数(包括输入层、隐藏层和输出层) |
l l l | 第 l l l层神经网络, l = 1 , 2 , ⋯ , L l=1,2,\cdots,L l=1,2,⋯,L |
n n n | 输入层的单元数 |
K K K | 输出层单元数 |
S l S_l Sl | 第 l l l层神经网络的单元数 |
a i ( l ) a^{(l)}_i ai(l) | 第 l l l层的第 i i i个单元 |
a ( l ) \mathbf{a}^{(l)} a(l) | 第 l l l层所有单元值组成的向量,显然有 a ( 1 ) = x \mathbf{a}^{(1)}=\mathbf{x} a(1)=x, a ( L ) = h Θ ( x ) \mathbf{a}^{(L)}=h_{\mathbf{\Theta}}(\mathbf{x}) a(L)=hΘ(x) |
Θ j i ( l ) \Theta^{(l)}_{ji} Θji(l) | 连接第 l l l层的第 i i i个单元和第 l + 1 l+1 l+1层的第 j j j个单元的参数 |
Θ ( l ) \mathbf{\Theta}^{(l)} Θ(l) | 连接第 l l l层和第 l + 1 l+1 l+1层的参数矩阵 |
Θ \mathbf{\Theta} Θ | 所有神经网络参数组成的张量 |
m m m | 训练集的样本数 |
正向传播算法
正向传播算法的计算过程如下所示:
a ( 1 ) = x a ( 2 ) = [ 1 ; g ( z ( 2 ) ) ] , z ( 2 ) = Θ ( 1 ) a ( 1 ) a ( 3 ) = [ 1 ; g ( z ( 3 ) ) ] , z ( 3 ) = Θ ( 2 ) a ( 2 ) ⋮ a ( L ) = [ 1 ; g ( z ( L ) ) ] , z ( L ) = Θ ( L − 1 ) a ( L − 1 ) h Θ ( x ) = a ( L ) \begin{array}{ll}\mathbf{a}^{(1)}=\mathbf{x}\\\mathbf{a}^{(2)}=[1;g(z^{(2)})],&z^{(2)}=\mathbf{\Theta}^{(1)}\mathbf{a}^{(1)}\\\mathbf{a}^{(3)}=[1;g(z^{(3)})],&z^{(3)}=\mathbf{\Theta}^{(2)}\mathbf{a}^{(2)}\\\vdots\\\mathbf{a}^{(L)}=[1;g(z^{(L)})],&z^{(L)}=\mathbf{\Theta}^{(L-1)}\mathbf{a}^{(L-1)}\\h_{\mathbf{\Theta}}(\mathbf{x})=\mathbf{a}^{(L)}\end{array} a(1)=xa(2)=[1;g(z(2))],a(3)=[1;g(z(3))],⋮a(L)=[1;g(z(L))],hΘ(x)=a(L)z(2)=Θ(1)a(1)z(3)=Θ(2)a(2)z(L)=Θ(L−1)a(L−1