深度学习之神经网络概述、BP算法

深度学习是由机器学习的神经网络发展而来的一个新的领域,模仿人脑的机制来解释数据(图像、声音和文本),结构是含多隐层的多层感知器。深度学习可以用无监督或半监督的特征学习和分层特征提取算法来高效地替代手工获取特征,通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

 

一、神经元

人的大脑是由大约10^{11}个神经元(neuron)相互连接组成的密集网络,平均每一个神经元与其他10^{4}个神经元相连。神经元的树突接受其他神经元轴突传递过来的神经递质后,它自己细胞体的活性被激活或抑制;激活时细胞体内部的电位超过阈值threshold,就会通过很长的轴突向与它相连的其他神经元的树突发送神经递质。

深度学习之神经网络概述、BP算法_第1张图片

M-P神经元模型如下:

深度学习之神经网络概述、BP算法_第2张图片

可以将神经元视为一个单独的决策单元,一个神经元接收到来自n个其他神经元传递过来的输入信号 X=\left \{ x_{1},x_{2},...,x_{n} \right \},这些输入信号通过带权重 w_{i} 的连接进行传递,神经元接收到的总输入值与神经元的阈值θ进行比较,然后通过激活函数f处理以产生神经元的输出y。

为了统一书写格式经常将阈值写成输入中的一个偏置项bias unit:x_{0}=1,它的权重为 w_{0}-\theta =w_{0}x_{0})。激活函数f的作用是将线性映射转换为非线性映射,常用的激活函数有sigmoid、softmax、tanh、relu、leaky relu等。

 

神经元可以完成各种逻辑运算,这里只举几个例子:

1、逻辑与 AND

        x_{1},x_{2}\in \left \{ 0,1 \right \}w=\left ( -30,20,20 \right )

        g(z)=\frac{1}{1+e^{-z}},由sigmoid图像可知在(-4,4)以外的区间上它的值分别趋近于0或1:

                深度学习之神经网络概述、BP算法_第3张图片

        y=x_{1}\wedge x_{2}=g(-30+20x_{1}+20x_{2})

        深度学习之神经网络概述、BP算法_第4张图片深度学习之神经网络概述、BP算法_第5张图片

 

2、逻辑或 OR

        x_{1},x_{2}\in \left \{ 0,1 \right \}w=\left ( -10,20,20 \right )

        y=x_{1}\vee x_{2}=g(-10+20x_{1}+20x_{2})

        深度学习之神经网络概述、BP算法_第6张图片深度学习之神经网络概述、BP算法_第7张图片

 

3、逻辑非 NOT

        x_{1}\in \left \{ 0,1 \right \}w=\left ( 10,-20 \right )

        y= ¬  x_{1}=g(10-20x_{1})

        深度学习之神经网络概述、BP算法_第8张图片深度学习之神经网络概述、BP算法_第9张图片

 

4、逻辑同或/异或非 XNOR

        对线性分类器的与或非等组合,即使用多层神经元可以解决非线性可分的问题。

        x_{1},x_{2}\in \left \{ 0,1 \right \}w_{1}^{(1)}=\left ( -30,20,20 \right )w_{2}^{(1)}=\left ( 10,-20,-20 \right )

        a_{1}^{(2)}=g(-30+20x_{1}+20x_{2})a_{2}^{(2)}=g(10-20x_{1}-20x_{2})w^{(2)}=(-10,20,20)

        y=x_{1}\odot x_{2}=g(-10+20a_{1}^{(2)}+20a_{2}^{(2)})

        深度学习之神经网络概述、BP算法_第10张图片

 

二、神经网络

神经网络是具有适应性的神经元组成的广泛并行互联的网络,能够模拟生物神经系统对真实世界物体所作出的交互反映。深度神经网络DNN可理解为有很多隐藏层的神经网络,也可称为多层感知机MLP(Multi-Layer Perceptron),按层次可分为输入层input layer、任意数量的隐藏层hidden layer和输出层output layer。

1、正向传播Forward Propagation

        深度学习之神经网络概述、BP算法_第11张图片

令图中 a_{k}^{(l)} 表示第 l 层的第k个神经元,w_{ij}^{(l)} 表示从第 l 层的第j个神经元映射到第 l+1 层的第i个神经元的权重,可得:

        a_{1}^{(2)}=g(w_{10}^{(1)}x_{0}+w_{11}^{(1)}x_{1}+w_{12}^{(1)}x_{2}+w_{13}^{(1)}x_{3})

        a_{2}^{(2)}=g(w_{20}^{(1)}x_{0}+w_{21}^{(1)}x_{1}+w_{22}^{(1)}x_{2}+w_{23}^{(1)}x_{3})

        a_{3}^{(2)}=g(w_{30}^{(1)}x_{0}+w_{31}^{(1)}x_{1}+w_{32}^{(1)}x_{2}+w_{33}^{(1)}x_{3})

        y=a_{1}^{(3)}=g(w_{10}^{(2)}a_{0}^{(2)}+w_{11}^{(2)}a_{1}^{(2)}+w_{12}^{(2)}a_{2}^{(2)}+w_{13}^{(2)}a_{3}^{(2)})

正向传播的计算过程可写为:

(1)初始化 a^{(1)}=x

(2)for l=2 to 总层数L:

                a^{(l)}=g(w^{(l-1)}a^{(l-1)})

(3)return y=a^{(L)}

 

2、反向传播算法 Back Propagation

BP算法是有监督学习((x^{(i)},y^{(i)})给定)的多层前馈神经网络用来校正模型权重矩阵的算法,由正向、反向传播两个环节组成:正向传播时x由输入层进入,正向逐层经过隐藏层传向输出层;如果输出值不满足期望,则取输出值与真实值误差的平方和作为目标函数,转入反向传播算法,反向逐层使用梯度下降更新各个神经元的权重。这两个环节反复迭代,当误差最终达到期望时,循环结束。

假设神经网络总层数为L,第l层的神经元个数为s_{l},输出结果总共有K种(K分类问题),则输出层第L层中第k类输出的误差可写为:

        深度学习之神经网络概述、BP算法_第12张图片

        E_{k}^{(L)}=\frac{1}{2}(a_{k}^{(L)}-y_{k}^{(L)})^{2}

        a_{k}^{(L)}=g(z_{k}^{(L)})=g(\sum_{i=1}^{s_{L}-1}w_{ki}^{(L-1)}a_{ki}^{(L-1)})

为了求出前一层第j个神经元权值 w_{kj}^{(L-1)} 对误差的贡献,根据复合函数求导的链式法则可得:

        \frac{\partial E_{k}^{(L)}}{\partial w_{kj}^{(L-1)}}=\frac{\partial E_{k}^{(L)}}{\partial a_{k}^{(L)}}\cdot \frac{\partial a_{k}^{(L)}}{\partial z_{k}^{(L)}}\cdot \frac{\partial z_{k}^{(L)}}{\partial w_{kj}^{(L-1)}}\\\\=\frac{1}{2}\cdot 2(a_{k}^{(L)}-y_{k}^{(L)})\cdot 1\odot g{}'(z_{k}^{(L)}) \frac{\partial \left ( w_{k1}^{(L-1)}a_{k1}^{(L-1)}+...+w_{kj}^{(L-1)}a_{kj}^{(L-1)}+...+w_{ks_{L-1}}^{(L-1)}a_{ks_{L-1}}^{(L-1)} \right )}{\partial w_{kj}^{(L-1)}}\\\\=(a_{k}^{(L)}-y_{k}^{(L)})\odot g{}'(z_{k}^{(L)})\left ( a_{kj}^{(L-1)} \right )^{T}

其中 \odot 为Hadamard积,即维度相同的矩阵对应位置的元素乘积 (A\odot B)_{ij}=a_{ij}b_{ij}。令\delta ^{(L)} 表示输出层的梯度:

        \delta ^{(L)}=\sum_{k}^{ }\frac{\partial E_{k}^{(L)}}{\partial z_{k}^{(L)}}=\frac{\partial E^{(L)}}{\partial a^{(L)}}\cdot \frac{\partial a^{(L)}}{\partial z^{(L)}}=\left ( a^{(L)}-y^{(L)} \right )\odot g{}'(z^{(L)})

因此第 l 层的梯度 \delta ^{(l)} 可表示为:

        \delta ^{(l)}=\sum_{k}^{ }\frac{\partial E_{k}^{(L)}}{\partial z^{(l)}}=\frac{\partial E^{(L)}}{\partial z^{(L)}}\cdot \frac{\partial z^{(L)}}{\partial z^{(L-1)}}\cdot \frac{\partial z^{(L-1)}}{\partial z^{(L-2)}}\cdot\cdot\cdot \frac{\partial z^{(l+1)}}{\partial z^{(l)}}=\delta ^{(l+1)}\cdot \frac{\partial z^{(l+1)}}{\partial z^{(l)}}\\\\\because z^{(l+1)}=w^{(l)}a^{(l)}=w^{(l)}g(z^{(l)})\\\\\therefore \delta ^{(l)}=\delta ^{(l+1)}\odot g{}'(z^{(l)})

得到每层的梯度后就可以使用梯度下降法更新权重矩阵了。

 

BP算法的流程:

输入:神经网络总层数L,各层神经元个数,激活函数,损失函数,学习率η∈(0,1),最大迭代次数maxIter及停止迭代阈值ε,m个训练样本\left \{ (x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)}) \right \}

输出:权重矩阵w

(1)随机初始化w

(2)for i =1 to maxIter:

            (2-1)for i = 1 to m:

                        set  a^{(1)}=x^{(i)}

                        for l=2\; to\, \; L,前向传播计算 a^{(l)}=g(w^{(l-1)}a^{(l-1)})

                        使用损失函数计算 \delta ^{(L)}=\left ( a^{(L)}-y^{(L)} \right )\odot g{}'\left ( z^{(L)} \right )

                        for l=L\; to\, \; 2,反向传播计算 \delta ^{(l)}=\delta ^{(l+1)}( w^{(l)})^{T}\odot g{}'\left ( z^{(l)} \right )

            (2-2)更新第l层的权重,一般使用小批量梯度下降法:w^{(l)}:=w^{(l)}-\eta \sum_{mini}^{ }\delta ^{(l+1)} (a^{(l)})^{T}

            (2-3)如果所有权重的变化值小于停止迭代阈值ε,则停止迭代。

(3)返回权重矩阵w。

 

参考资料

吴恩达_机器学习PPT

https://www.cnblogs.com/pinard/p/6422831.html

 

你可能感兴趣的:(深度学习)