优快云这几天坏了ヽ(`Д´)ノ︵ ┻━┻ ┻━┻
##一. 神经元模型
神经网络中最基本的成分:神经元模型
神经元模型: 线性模型+激活函数
线性模型+符号函数 = 感知机
线性模型+sigmoid函数 = 逻辑回归
##二 . 多层前馈神经网络
定义: 每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。
假设第l−1l−1l−1层共有mmm个神经元,第lll层共有nnn个神经元,
则第lll层的线性系数WWW组成了一个n×mn×mn×m的矩阵WlW^lWl,
第lll层的偏置bbb组成了一个n×1n×1n×1的向量blb^lbl ,
第l−1l−1l−1层的的输出aaa组成了一个m×1m×1m×1的向量al−1a^{l−1}al−1,
第lll层的的未激活前线性输出ZZZ组成了一个n×1n×1n×1的向量ZlZ^lZl,
激活函数σ\sigmaσ 可以有多种选择。
sigmoid tanh ReLu
第lll层的的输出aaa组成了一个n×1n×1n×1的向量ala^lal。则用矩阵法表示,
第lll层的输出为:
al=σ(Zl)=σ(Wlal−1+bl)a^l=\sigma (Z^l) = \sigma(W^la^{l-1}+b^l) al=σ(Zl)=σ(Wlal−1+bl)
前向传播算法:
从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果aLa^LaL。
##三. 反向传播算法(BackPropagation)
训练数据集 D={(x1,y1),(x2,y2),..(xm,ym)}D=\{(x_1,y_1),(x_2,y_2),..(x_m,y_m)\}D={(x1,y1),(x2,y2),..(xm,ym)}
损失函数最小化, 神经网络可选的损失函数有很多: 平方损失函数,交叉熵 , 对数似然。
待求参数是每一个层与层之间的权值矩阵wlw^lwl和偏置矩阵blb^lbl。
这里以平方损失函数为例。aLa^LaL 是输出层的结果。
E(W,b,x,y)=12∥aL−y∥22E(W,b,x,y) = \frac{1}{2}\|a^L-y\|^2_{2}E(W,b,x,y)=21∥aL−y∥22
=12∥σ(WLaL−1+bL)−y∥22=\frac{1}{2}\|\sigma(W^La^{L-1}+b^L)-y\|^2_{2}=21∥σ(WLaL−1+bL)−y∥22
求导
∂E∂WL=∂E∂aL∂aL∂ZL∂ZL∂WL=(aL−y)⊙σ′(ZL)(aL−1)T\frac{\partial E}{\partial W^L}= \frac{\partial E}{\partial a^L} \frac{\partial a^L}{\partial Z^L}\frac{\partial Z^L}{\partial W^L}=(a^L-y) \odot \sigma^{'}(Z^L)(a^{L-1})^T∂WL∂E=∂aL∂E∂ZL∂aL∂WL∂ZL=(aL−y)⊙σ′(ZL)(aL−1)T
∂E∂bL=∂E∂aL∂aL∂ZL∂ZL∂bL=(aL−y)⊙σ′(ZL)\frac{\partial E}{\partial b^L}= \frac{\partial E}{\partial a^L} \frac{\partial a^L}{\partial Z^L}\frac{\partial Z^L}{\partial b^L}=(a^L-y) \odot \sigma^{'}(Z^L)∂bL∂E=∂aL∂E∂ZL∂aL∂bL∂ZL=(aL−y)⊙σ′(ZL)
其中$\odot 表示Hadamard积,矩阵的对应元素相乘。<fontcolor=red>权值矩阵先影响到输出层神经元的输入表示Hadamard积,矩阵的对应元素相乘。
<font color =red>权值矩阵先影响到输出层神经元的输入表示Hadamard积,矩阵的对应元素相乘。<fontcolor=red>权值矩阵先影响到输出层神经元的输入ZL$,再影响到输出层神经元的输出$aL,然后影响到损失函数,然后影响到损失函数,然后影响到损失函数E$。
由此我们算出了输出层的梯度,那如何计算下一层,下下一层的梯度呢?
反向传播:从输出层开始,一层一层往下计算
∂E∂WL−1=∂E∂ZL∂ZL∂ZL−1∂ZL−1∂WL−1\frac{\partial E}{\partial W^{L-1}}= \frac{\partial E}{\partial Z^L} \frac{\partial Z^{L}}{\partial Z^{L-1}}\frac{\partial Z^{L-1}}{\partial W^{L-1}}∂WL−1∂E=∂ZL∂E∂ZL−1∂ZL∂WL−1∂ZL−1
第一项就是上面LLL层梯度链式法则中前两项的乘积
第二项 很容易算
ZL=WLaL−1+bL=WLσ(ZL−1)+bLZ^L=W^La^{L-1}+b^L=W^L\sigma(Z^{L-1})+b^LZL=WLaL−1+bL=WLσ(ZL−1)+bL
第三项 很容易算
ZL−1=WL−1aL−2+bL−1Z^{L-1}=W^{L-1}a^{L-2}+b^{L-1}ZL−1=WL−1aL−2+bL−1
由此算出了L−1L-1L−1层的梯度,如此递推
L−2L-2L−2层
∂E∂WL−2=∂E∂ZL−1∂ZL−1∂ZL−2∂ZL−2∂WL−2\frac{\partial E}{\partial W^{L-2}}= \frac{\partial E}{\partial Z^{L-1}} \frac{\partial Z^{L-1}}{\partial Z^{L-2}}\frac{\partial Z^{L-2}}{\partial W^{L-2}}∂WL−2∂E=∂ZL−1∂E∂ZL−2∂ZL−1∂WL−2∂ZL−2
第一项 是上面的L−1L-1L−1层梯度链式法则前两项的乘积
第二项 第三项 同上 很好算
根据梯度下降算法(SGD, MBGD)就能学出神经网络了。(╯°O°)╯( ┻━┻再掀一次