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


    神经元

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

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

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

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

    神经网络

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

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

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

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

    前向传播

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

    首先开始计算 net0net0 :

    net0=w0x0+w2x1+b01
    net0=w0x0+w2x1+b01

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

    a0=Sigmoid(net0)=11enet0
    a0=Sigmoid(net0)=11enet0

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

    o0=Sigmoid(w4a0+w6a1+b21)
    o0=Sigmoid(w4a0+w6a1+b21)

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

    反向传播

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

    wi=wiaJ(W)wi
    wi=wiaJ(W)wi

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

    J(W)w5=J(W)o1o1net3net3w5
    J(W)w5=J(W)o1o1net3net3w5

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

    J(W)=12mi=1(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)等等网络架构。

    其他我用到的资料:


    __EOF__

  • 本文作者: PokPok的研究日志
  • 本文链接: https://www.cnblogs.com/pokpok/p/16127239.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    SpringMVC面试题
    一氧化碳单位换算 以及环保最低排放
    python安装完matplotlib 报错
    转以太网通过CHNet-S7200在纺机设备控制系统联网中的应用
    datart:Invalid database configuration. Datart is running in demo mode
    关于#搜索引擎#的问题:虽然静下心学英语,更适合中国宝宝认知的学习英语,应试英语的方法,针对于听力、阅读、单词量(最头疼)、作文,有什么方向或经验能推荐、分享一下吗
    前端简单的爱心形状
    MySQL的架构和性能优化
    title标签和meta标签怎样设置?有什么含义?
    06c++呵呵老师【FPS实现游戏角色】
  • 原文地址:https://www.cnblogs.com/pokpok/p/16127239.html