八、神经网络

神经网络(Neural Network)

    爆发要素:大数据、计算能力(GPU)、算法

单层感知器


    输入节点:x1,x2,x3

    输出节点:y

    权向量:w1,w2,w3

    偏置因子:b

    激活函数:sign(x)= 1,x\geq 0;-1,x < 0,上图中为f(\sum_{i}w_ix_i+b)

感知器学习规则

    y=f(\sum_{i}w_ix_i)i=0,1,2,...y是网络输出,fsign函数

    \Delta w_i = \eta (t-y)x_i\eta学习率,t表示正确的标签,ty取值为\pm 1


    \Delta w_i = \pm 2\eta x_i,    (权值改变的情况)

    w_i = w_i+\Delta w_i


eg:

    设t=1,\eta = 1,x_1=1,w_1 = -5,b=0

    step1:

    y = sign(1*(-5)) = -1

    \Delta w = 1*(1-(-1))*1=2

    w_1 = w_1+\Delta w=-3

    step2

    y = sign(1*(-3)) = -1

    \Delta w = 1*(1-(-1))*1=2

    w_1 = w_1+\Delta w=-1

    step3

    y = sign(1*(-1)) = -1

    \Delta w = 1*(1-(-1))*1=2

    w_1 = w_1+\Delta w=1

    y = sign(1*1)=1=t


学习率\eta取值一般取0-1之间,太大容易造成权值调整不稳定,太小则权值调整太慢,迭代次数太多。

模型收敛条件:误差小于某个预先设定的较小的值

                         两次迭代之间的权值变化已经很小

                         设定最大迭代次数,当迭代超过最大次数就停止(常用)



:假设平面坐标系上有4个点,(3,3),(4,3)这两个点的标签为1,(1,1),(0,2)这两个点的标签为-1,构建神经网络来分类。

思路:已知要分类的数据是2维数据,所以只需要2个输入节点,可把偏置值也设为一个节点,即3个输入节点。即,输入数据数据有4个(1,3,3),(1,4,3),(1,1,1),(1,0,2)数据对应标签为(1,1,-1,-1),初始化权值w0,w1,w2,取-1-1的随机数,学习率(learning rate)设置为0.11,激活函数为sign函数

代码见——九、神经网络代码



线性神经网络

    感知器的激活函数只能输出两种可能的值,而线性神经网络的输出可以取任意值,其激活函数是线性函数。线性神经网络采用Widrow-Hoff学习规则,即LMS(Least Mean Square)算法来调整网络的权值和偏置。

    线性神经网络在结构上与感知器非常相似,仅是激活函数不同,在训练模型时把原来的sign函数改成了purelin函数:y=x。

激活函数(Activation Function)

    如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中

常见激活函数见:附、常见激活函数 - 简书

Delta学习规则

    \delta学习规则,也可以称为连续感知器学习规则,是一种利用梯度下降法的一般性的学习规则。

代价函数E = \frac{1}{2}(t-y)^2 = \frac{1}{2}[t-f(W^TX)]^2

    其中y是预测值,误差E是权向量W的函数,想使得E最小,W应与误差的负梯度成正比,即

    \Delta W = -\eta E’ = \eta X^T(t-y)f’(W^TX) = \eta X^T\delta

    \Delta W_i = -\eta E’ = \eta X_i(t-y)f’(W^TX) = \eta X_i\delta \delta = (t-y)f’(W^TX)


解决异或问题

    madaline可以用一种间接的方式解决线性不可分的问题,方法是用多个线性函数对区域进行划分,然后对各个神经元的输出做逻辑运算。


Madaline结构图


Madaline实现异或


    线性神经网络解决异或不可分问题的另一个方法是,对神经元添加非线性输入,从而引入非线性成分,这样做会使等效的输入维度变大,如图:


线性网络解决非线性问题

x_0,x_1,x_1^2,x_1x_2,x_2,x_2^2


BP神经网络(Back Propagation Neural Network)

    BP算法:

        E = \frac{1}{2}(t-y)^2

        \frac{\partial E}{\partial W^l} = -(X^l)^T \delta ^l

        \Delta W^l = -\eta \frac{\partial E}{\partial W^l} = \eta(X^l)^T\delta^l    (Delta学习规则)

        \delta^L = (t-y)f’(X^LW^L)

        \delta^l = \delta^{l+1}(W^{l+1})^Tf’(X^lW^l)        (\delta^l l层学习信号,\delta^L输出层学习信号,w^ll \rightarrow l+1层权值,X^ll层输入信号)

    激活函数常使用ReLu,因为\delta^L = (t-y)f’(X^LW^L)

    调整权值的原则是使误差不断的减小,因此应使权值的调整量与误差的梯度下降成正比

注:激活函数的取值尽量不要选取趋近饱和的值,否则几乎学不到东西

       隐藏层太高会导致梯度消失的问题

       导数不能大于1,否则会导致梯度爆炸问题

       W的初始化采用正则初始化方式更好 W--U[-\frac{\sqrt{6} }{\sqrt{n_j+n_{j+1}}},\frac{\sqrt{6} }{\sqrt{n_j+n_{j+1}}}]

       使用sigmoid或tanH激活与标准初始化方式,效果较差,收敛慢。会收敛到一个局部最小值中

       使用softsign激活与正则初始化,比较健壮

       tanH使用正则初始化,效果也不错,最好使用预训练,pre-training

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容