开发者学堂课程【机器学习算法 :误差反向传播算法-1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/535/detail/7240
误差反向传播算法-1
多层感知器的训练
单层感知器根据输出值的不一样,可以分为离散型和连续性,离散型的按照离散感知器学习规则,连续型的使用Δ学习规则或Δ学习规则的变种,如:LMS 学习规则。
确定学习规则后,单层感知器训练依照离散感知器学习规则或 & 学习规则,对于一组输入有一个预期输出,通过模型再得到一个实际输出,通过比较感知器输出结果和预期输出结果是否一致,如果不一致会有一个差值,基于差值调整感知器的权重和阈值,直至差值小到接受范围内,即可完成模型训练,得到一个比较满意的结果。
1.单层感知器学习规则的逻辑
如下∶
Ø 定义一个包含感知器参数的损失函数,用来衡量当前模型优劣。
Ø 调整参数的值,让损失函数逐步变小
Ø 损失函数小到一定程度,使得输出结果和预期输出结果的差可以接受
Ø 学习得到合乎要求的模型
多层感知器的学习规则同样使用该逻辑,只是由于多层感知器的隐藏层的神经元,没有直接的预期输出结果,其预期输出体现在下一层(单隐藏层)或者下 N 层(多个隐藏层)的输出中,需要从整体考虑具体的损失函数。
总结:无法定义隐藏层的输出函数得到的是整体隐藏函数。
如图为单隐藏的多层感知器,三层:输入、输出和隐藏。
此时有两组权重需要调整。根据之前预期输出和实际输出的差去调整,实际上预期输出是输出层的输出,而非隐藏层。在此就会十分繁琐。
2. 步骤
Step 1:初始化 W, b
Step 2:在训练数据集中选取(Xi,Yi)
Step 3 :
计算损失函数 L=Yi=(WXi+b),如果 L≤0,则更新权重及偏置量∶
step 4∶转至 Step 2
3. 示例
(1)题目
多层感知器的拓扑结构如图,共有三层。输入层一层含有三个结点,一个是 b 偏置,还有两个输入向量的分量 x1,x2。隐藏层两个结点,一个 h1,一个 h2。输出层一个结点 o。
同时权重已经在线上标明,如:x1 的权重为1和0。
(2)分析
首先它们的关系如下,隐藏层和输入层:h1=b*0+x1*1+x2*1等于x1+x2;h2 =b*1+x1*0+x2*1等于。此时假设激活函数没有,直接为简单的累加求和,最后结果为 o 的平方。而 o 净输出=2*h1+3*h2。即结果如图。
假设此时 x1 发生变化,必然会对 h1 产生影响,常用导数来表示。导数的概念为用极限的概念表示变化率,所以当 x1极小时,对应的导数就表示 h1 的变化的量。
同时h1此时较为特殊,它还受 x2 的影响,b 为0所以不做影响。即此时 h1 依赖于多个变量,所以再说明 x1 对于 h1的影响应使用偏导数。同样当 x2 变化时也会对 h1 产生影响。
x1 变化时,h1 也会变化,可以通过导数来表示:
h1 依赖于多个变量,x1 的影响需偏导数来表示:
h1 依赖于多个变量,x2 的影响需偏导数来表示:
同样 h1 的变化也会影响 o。
o 依赖于多个变量,h1 的影响需偏导数来表示:
最后具体衡量 x1 变化对于 o的影响。而此时并不能直接为 x1 求导,此时因使用链式求导法则。根据u=2x1+5x2+3b,o 就是 u 的平方。所以 o 对 x1 求导就是 o 对 u 求导和 u 对 x1 求导两者的乘积,所以最后要用数量来衡量 x1 对 o 的影响则为8x1+20x2+12b。
x1 变化对于 o 的影响为:
o 对 x1 求导:
x1 变化对 o 的影响为:8x1+20x2+12b
l 链式求导法则:
假设此时有函数 y=f(g(X)),要求 y 对 x 的导数,只需设 u=g((X)),y=f(g(X)) 就会变为 y=f(u),再求 y 对于 u 求导即可,而此时 u 又是关于 x 的函数,所以再求 u 对 x 求导,最后两者乘积就是 y 对 x求导的结果。这就是链式求导法则。
同理 x2 变化后的对 o 的影响也可以求出。虽然 x2 对 h1 和 h2 都有影响但 o 的表达式中已经包含了 h1 和 h2 两者的影响,所以直接使用 o 对 X1 求导就表明了,x2 变化对 o 的影响。同理还可以求出b变化时的影响。
X2 变化对 o 的影响为:
b 变化对 o 的影响为:
(3) 从输入建立到输出的关系,当网络结构简单时,遍历路径可控∶
b 变化会影响到 h1, 再影响 o
b -> h1 ->o
b 变化会影响到 h2,再影响 o
b ->h2 ->o
x1 ->h1 ->o
x1 ->h2 ->o
x2 -> h1 -> o
x2 ->h2 ->o
当输入变量增多、隐藏层增加或者隐藏层中的神经元增多时,求偏导的次数快速增加,与神经元个数的二次方成正比。
计算量过大,使得学习过程变得仅仅理论上可行。(这也是闵斯基看衰 ANN 的原因)。设想一个2个隐藏层,每个隐藏层10个节点的结构,输入变量 x 将会有10*10条路径影响到输出变量 o。
从输入到输出的链式求导顺序,关的是输入对输出的影响。事实上通过简单计算能得到模型输出和实际输出的差异,我们更想知道的是输出 o 的变化对前面的路径(输入+权重参数)有什么影响.