机器学习整理(神经网络)

神经元

神经网络由多个神经元组成,其中神经元由几个部分组成:输入、输入权重、输出和激活函数组成,类似于生物神经元的树突、轴突的组成。

神经元的输入由左边的神经元输出 x 乘以权重 w 并加和得到,输出的时候,类似于生物神经元的轴突,将神经元的输出通过激活函数才能传送给接下来的神经元。

常用的激活函数(activation function)是Sigmod,它的函数图像如下,在逻辑回归的时候使用过:

其中偏置单元 b 是用于提高神经网络的灵活性而加入的,它的存在可以让激活函数更快或者更慢达到激活状态。

神经网络

多个神经元组层一个神经网络:

神经网络第一层是输入层(input),最后一层是输出层(output),而中间的就是神经网络的隐藏层(hidden layer)

神经网络的训练过程如下:

  1. 随机初始化权重 wi
  2. 代入执行前向传播得到神经网络的输出 oi
  3. 计算代价函数 J(W)
  4. 执行反向传播,计算偏导数 J(W)wi ,依次更新网络的权重
  5. 将样本 (xi,yi) 不断代入第2步到第4步。

前向传播

前向传播的过程目的是计算出神经网络的输出:

首先开始计算 net0 :

net0=w0x0+w2x1+b01

到达隐藏层的神经元后,会通过激活函数作为神经元的输出 a0

a0=Sigmoid(net0)=11enet0

计算该神经元后继续向前计算,和前面一层的计算类似:

o0=Sigmoid(w4a0+w6a1+b21)

按照这样的传播过程,这样就能计算出神经网络的输出 o1,o2,,on ,即神经网络的前向传播,就像把样本 x 代入y=ax+b里求出 y 值的过程一样。

反向传播

按照神经网络的训练过程,接下来是希望计算代价函数 J(W) ,并求出 J(W)wi 的偏导数 J(W)wi ,并按照学习率 a 更新参数:

wi=wiaJ(W)wi

以更新 w5 为例,如果需要知道 J(W)w5 的值,根据链式求导法则:

J(W)w5=J(W)o1o1net3net3w5

(1)首先求J(W)o1 ,其中 J(W) 是代价函数,这里用均方误差来计算误差,y 是样本的结果,那么表达式就是:

J(W)=12i=1m(yioi)2=12(y0o0)2+12(y1o1)2

其中对 o1 的偏导数为:

J(W)o1=0+212(y1o1)1=(y1o1)

(2)然后是求 o1net3

o1=Sigmoid(net3)

其中对 net3 的偏导数为:

o1net3=Sigmoid(net3)=Sigmoid(net3)(1Sigmoid(net3)

激活函数Sigmoid的函数 f(x) 的导数等于 f(x)(1f(x))见证明

(3)最后是求 net3w5 :

net3=w5a0+w7a1+b1

net3w5=a01+0=a0

所以最终求得偏导项:

J(W)w5=(y1o1)Sigmoid(net3)(1Sigmoid(net3))a0

w5 也能在反向传播中更新自己的权重,通过减去 aJ(W)w5

第三个导数项求偏导时都会等于上一层的激活函数的输出值,如果把前两个导数项 J(W)oioineti 用符号 δi 代替的话,那么:J(W)w5=ajδi

如果要更新隐藏层的权重 w1 ,则

J(W)w1=J(W)a0a0net0net0w1

因为 J(W)a0 同时受到 o0o1 的影响,所以:

J(W)w1=(J(W)0a0+J(W)2a0)a0net0net0w1

其中 J(W)0 代表在 o0 的损失,计算和前面的规则类似,依次根据链式求导规则展开即可对给定的 (xi,yi) 拟合。

其他资料

在这里基本打开了神经网络的大门,虽然目前学到只是一个全连接网络和基本的BP算法,但是在这篇文章中可以看到还有支持增量学习的自适应谐振理论网络(ART),以及自动连接神经元的自我组织网络(SOM)等等网络架构。

其他我用到的资料:

posted @   pokpok  阅读(346)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示