zoukankan      html  css  js  c++  java
  • 神经网络的基础原理

    链接:

    https://adventuresinmachinelearning.com/neural-networks-tutorial/

     不翻译了, 简单记录一下几个关键词和基本的原理

    1.梯度下降 (gradient descendent)

    这里的梯度等价于坡度 (斜率), 就是根据导数的大小(斜率)和方向, 来逼近奇点. 比如: 导数>0, (连续区域内可导), 那么代价函数(误差函数)单调递增, 所以向左逼近极值. 反之向右.

    wnew=woldαerror

    Here wnedenotes the new position, wold denotes the current or old w position, error is the gradient of the error at wold and α is the step size. 

    从上可以看出, 斜率越大, 收敛速度越快. 

    2.反向传播(back propagation)

    输出层的偏导数是可以根据结果确定的. 之前的隐藏层, 因为第n-1层的输出为第n层的输入, 所以是嵌套函数. 假设第n-1层函数为y=f(x), 第n层函数为z=g(y), 只不过实际上g()函数和f()函数相同, 只用不同的标记便于区分.

    那么根据链式法则(chain rule),  dz/dx = (dz/dy) * (dy/dx) = g'(y) * f'(x),  可以看到, 嵌套函数的导数(偏导数), 实际上是两个函数的导数(偏导数)展开相乘.

    又由于最后一层(输出层)的(偏)导数可以根据结果直接推出, 对上面例子来说就是外层函数的导数 g'(y) 可以直接推出, 而f(x)是选择的固定函数, 所以f'(x)也确定. 那么倒数第二层(隐藏层中的最后一层) 的导数就是h' = g'(y) * f'(x), 同理, 倒数第三层就是h' * f'(x)

    可以发现每一层的(偏)导数, 都依赖它后面一层的(偏)导数作为因子. 只有按从后向前的层序, 才能计算出结果, 这个过程叫反向传播.

    3.雅可比矩阵J

    由偏导数组成的矩阵, 这个矩阵并不陌生, 在IK的paper里面也用了雅可比转置法, 来迭代逼近IK结果 (https://www.cnblogs.com/crazii/p/4662199.html) , 不过那个部分我没仔细去看.

    总结:

    为每个节点选择固定函数f(wx+b), 并用一组值(向量x)代入便可以得到结果(向量y).

    训练的过程: 已知输入x和参考输出y, 将输入带入网络, 得出的结果y0和参考结果y对比得到一个代价函数h (可以理解为误差函数或者差距函数, 比如, 具有最小值的(y-y0)2的二次曲线), 通过梯度下降, 不断迭代, 每次迭代调整w和b, 最终 使得h达到奇点(最小值), 也就是输出最接近参考值.

    总结2: 感觉自己还没入门, 继续积累吧.

  • 相关阅读:
    [题解]luogu_P1627_中位数(排列乱搞
    [题解]luogu_P3313_旅行(树剖
    [题解]luogu_P3201_梦幻布丁(启发式合并
    [题解]luogu_P4127_同类分布(数位dp
    [题解]弹飞绵羊
    [题解]luogu_P3469_BLO(理解tarjan/割点
    [题解]luogu_P3304直径(直径必经边
    [HAOI2015]树上操作(树链剖分)
    [SCOI2005]扫雷(递推)
    洛谷3865 ST表
  • 原文地址:https://www.cnblogs.com/crazii/p/10948254.html
Copyright © 2011-2022 走看看