学c还是网站开发品牌vi设计是什么意思
学c还是网站开发,品牌vi设计是什么意思,网站背景怎么弄,查看网站开通时间AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念
Copyright Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源#xff0c;请见微软人工智能教育与学习共建社区
Content01.0-神经网络的基本工作原理0…AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念
Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源请见微软人工智能教育与学习共建社区
Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下降02.1-线性反向传播02.2-非线性反向传播02.3-梯度下降03.0-损失函数03.1-均方差损失函数03.2-交叉熵损失函数04.0-单入单出单层-单变量线性回归04.1-最小二乘法04.2-梯度下降法04.3-神经网络法04.4-梯度下降的三种形式04.5-实现逻辑非门05.0-多入单出单层-多变量线性回归05.1-正规方程法05.2-神经网络法05.3-样本特征数据的归一化05.4-归一化的后遗症05.5-正确的推理方法05.6-归一化标签值06.0-多入多出单层神经网络-多变量线性分类06.1-二分类原理06.2-线性二分类实现06.3-线性二分类结果可视化06.4-多分类原理06.5-线性多分类实现06.6-线性多分类结果可视化07.0-激活函数07.1-挤压型激活函数07.2-半线性激活函数07.3-用双曲正切函数分类07.4-实现逻辑与门和或门08.0-单入单出双层-万能近似定理08.1-双层拟合网络的原理08.2-双层拟合网络的实现09.0-多入多出双层-双变量非线性分类09.1-实现逻辑异或门09.2-理解二分类的工作原理09.3-非线性多分类09.4-理解多分类的工作原理10.0-调参与优化10.1-权重矩阵初始化10.2-参数调优10.3-搜索最优学习率10.4-梯度下降优化算法10.5-自适应学习率算法11.0-深度学习基础11.1-三层神经网络的实现11.2-验证与测试11.3-梯度检查11.4-手工测试训练效果11.5-搭建深度神经网络框架12.0-卷积神经网络12.1-卷积12.2-池化14.1-神经网络模型概述14.2-Windows模型的部署14.3-Android模型的部署
第二篇神经网络中反向传播与梯度下降的基本概念
预警本篇博客中会涉及到偏导数的概念但是非常初级很容易理解建议硬着头皮看跟着算一遍看完之后保证会觉得人生美好了很多。
反向传播和梯度下降这两个词第一眼看上去似懂非懂不明觉厉。这两个概念是整个神经网络中的重要组成部分是和误差函数/损失函数的概念分不开的。
神经网络训练的最基本的思想就是先“蒙”一个结果我们叫预测结果a看看这个预测结果和事先标记好的训练集中的真实结果y之间的差距然后调整策略再试一次这一次就不是“蒙”了而是有依据地向正确的方向靠近。如此反复多次一直到预测结果和真实结果之间相差无几亦即|a-y|-0就结束训练。
在神经网络训练中我们把“蒙”叫做初始化可以随机也可以根据以前的经验给定初始值。即使是“蒙”也是有技术含量的。
通俗地理解反向传播
举个通俗的例子Bob拿了一支没有准星的步枪或者是准星有bug或者是Bob眼神儿不好看不清靶子或者是雾很大…反正就是Bob很倒霉。第一次试枪后拉回靶子一看弹着点偏左了于是在第二次试枪时Bob就会有意识地向右侧偏几毫米再看靶子上的弹着点如此反复几次Bob就会掌握这支步枪的脾气了。下图显示了Bob的5次试枪过程 在这个例子中 每次试枪弹着点和靶心之间的差距就叫做误差可以用一个误差函数来表示比如差距的绝对值如图中的红色线。 一共试枪5次就是迭代/训练了5次的过程 。 每次试枪后把靶子拉回来看弹着点然后调整下一次的射击角度的过程叫做反向传播。注意把靶子拉回来看和跑到靶子前面去看有本质的区别后者容易有生命危险因为还有别的射击者。一个不恰当的比喻是在数学概念中人跑到靶子前面去看叫做正向微分把靶子拉回来看叫做反向微分。 每次调整角度的数值和方向叫做梯度。比如向右侧调整1毫米或者向左下方调整2毫米。如图中的绿色矢量线。
上图是每次单发点射所以每次训练样本的个数是1。在实际的神经网络训练中通常需要多个样本做批量训练以避免单个样本本身采样时带来的误差。在本例中多个样本可以描述为连发射击假设一次可以连打3发子弹每次的离散程度都类似如下图所示 如果每次3发子弹连发这3发子弹的弹着点和靶心之间的差距之和再除以3叫做损失可以用损失函数来表示。
其实损失就是所有样本的误差的总和所以有时候损失函数可以和误差函数混用概念。
其实射击还不这么简单如果是远距离狙击还要考虑空气阻力和风速在神经网络里空气阻力和风速可以对应到隐藏层的概念上。
用数学概念理解反向传播
我们再用一个纯数学的例子来说明反向传播的概念。
假设我们有一个函数 zx∗y其中:xw∗2b,yb1即:z(w∗2b)∗(b1)z x * y其中: x w * 2 b, y b 1即: z (w * 2 b) * (b 1)zx∗y其中:xw∗2b,yb1即:z(w∗2b)∗(b1)
关系如下图 注意这里x, y, z不是变量w, b是才变量因为在神经网络中我们要最终求解的是w和b的值x,y,z只是样本值。
当w 3, b 4时会得到如下结果 最终的z值受到了前面很多因素的影响变量w变量b计算式x计算式y。常数是个定值不考虑。目前的z50如果我们想让z变大一些w和b应该如何变化呢
我们从z开始一层一层向回看图中各节点关于变量b的偏导计算结果如下图 因为z x
y其中x w2 by b 1
所以
∂z∂b∂z∂x∗∂x∂b∂z∂y∗∂y∂b5∗110∗115\frac{\partial{z}}{\partial{b}}\frac{\partial{z}}{\partial{x}}*\frac{\partial{x}}{\partial{b}}\frac{\partial{z}}{\partial{y}}*\frac{\partial{y}}{\partial{b}}5*110*115∂b∂z∂x∂z∗∂b∂x∂y∂z∗∂b∂y5∗110∗115
其中
∂z∂x∂∂x(x∗y)y5\frac{\partial{z}}{\partial{x}}\frac{\partial{}}{\partial{x}}(x*y)y5∂x∂z∂x∂(x∗y)y5
∂z∂y∂∂y(x∗y)x10\frac{\partial{z}}{\partial{y}}\frac{\partial{}}{\partial{y}}(x*y)x10∂y∂z∂y∂(x∗y)x10
∂x∂b∂∂b(w∗2b)1\frac{\partial{x}}{\partial{b}}\frac{\partial{}}{\partial{b}}(w*2b)1∂b∂x∂b∂(w∗2b)1
∂y∂b∂∂b(b1)1\frac{\partial{y}}{\partial{b}}\frac{\partial{}}{\partial{b}}(b1)1∂b∂y∂b∂(b1)1
有一个很有趣的问题是z x * y 10 * 5 50表面看起来x10y5似乎x对z的贡献较大。那么x的微小变化和y的微小变化对z来说哪一个贡献大呢
我们假设只有x变化时△x 0.1, 则z (x
△x) * y 10.1 * 5 50.5
我们再假设只有y变化时△y 0.1, 则z x * (y △y) 10
5.1 51
50.5 51说明y的微小变化对z的贡献比较大这个从
∂z∂x∂∂x(x∗y)5lt;∂z∂y∂∂y(x∗y)10\frac{\partial{z}}{\partial{x}}\frac{\partial{}}{\partial{x}}(x*y)5 lt; \frac{\partial{z}}{\partial{y}}\frac{\partial{}}{\partial{y}}(x*y)10∂x∂z∂x∂(x∗y)5∂y∂z∂y∂(x∗y)10
和这两个值的比较来看也可以证明。而△x和△y就可以理解为梯度值。
同理我们也可以得到图中各变量对w的偏导值 从以上两图可以看出反向微分保留了所有变量包括中间变量对结果z的影响。若z为误差函数则对图进行一次计算可以得到所有节点对z的影响即梯度值下一步就可以利用这些梯度值来更新w和b的权重。
w的变化和b的变化哪一个对z的变化贡献大从图中还可以注意到
∂z∂b15\frac{\partial{z}}{\partial{b}}15∂b∂z15
∂z∂w10\frac{\partial{z}}{\partial{w}}10∂w∂z10
所以每次w和b的变化值是不相同的b的变化会比w大一些也就是每一步的跨度大一些这个是与z xy (w2b)*(b1)这个算式相关的并不代表神经网络中实际情况。
反向传播的实际计算过程单变量
还是用上面的例子目前 w3w 3w3 b4b4b4 xw∗2b10x w*2b 10xw∗2b10 yb15y b1 5yb15 zx∗y50z x*y50zx∗y50
假设我们最终的目的想让z 60只改变b的值如何实现
答案就是偏导数
∂z∂bΔzΔb15\frac{\partial{z}}{\partial{b}}\frac{\Delta{z}}{\Delta{b}}15 ∂b∂zΔbΔz15
目前z50, 距离60相差10所以我们令Δz60−5010\Delta{z}60-5010Δz60−5010则
ΔzΔb1510Δb\frac{\Delta{z}}{\Delta{b}}15\frac{10}{\Delta{b}} \\ ΔbΔz15Δb10
所以:
Δb0.66667\Delta{b} 0.66667Δb0.66667
再带入式子中顺便说一句下面这个计算过程就叫做前向计算 w3w 3w3 b40.666674.66667b40.666674.66667b40.666674.66667 xw∗2b10.66667x w*2b 10.66667xw∗2b10.66667 yb15.66667y b1 5.66667yb15.66667 zx∗y10.66667∗5.6666760.4445z x*y10.66667*5.6666760.4445zx∗y10.66667∗5.6666760.4445
一下子超过60了咋办再来一次下面的过程就叫做反向传播
我们令Δz60−60.4445−0.4445\Delta{z}60-60.4445-0.4445Δz60−60.4445−0.4445则
ΔzΔb15−0.4445Δb\frac{\Delta{z}}{\Delta{b}}15\frac{-0.4445}{\Delta{b}} \\ ΔbΔz15Δb−0.4445
所以:
Δb−0.02963\Delta{b} -0.02963Δb−0.02963
再带入式子中 w3w 3w3 b4.66667−0.029634.63704b4.66667-0.029634.63704b4.66667−0.029634.63704 xw∗2b10.63704x w*2b 10.63704xw∗2b10.63704 yb15.63704y b1 5.63704yb15.63704 zx∗y10.63704∗5.6370459.96z x*y 10.63704*5.6370459.96zx∗y10.63704∗5.6370459.96
咦哈59.96了再迭代几次应该可以近似等于60了直到误差不大于0.00001时我们就可以结束迭代了对于计算机来说这些运算的执行速度很快。
有的同学会说了这个问题不是用数学公式倒推求解一个二次方程就能直接得到准确的b值吗是的但是我们是要说明机器学习的方法机器并不会解二次方程而且很多时候不是用二次方程就能解决实际问题的。而上例所示是用机器所擅长的迭代计算的方法来不断逼近真实解这就是机器学习的真谛而且这种方法是普遍适用的。
用二维平面函数说明梯度下降原理
很多资料中会用下面这个图来说明梯度下降但是都没有说清楚以下几个问题
1 为啥用这个看上去像yx2y x^2yx2族的函数来说明梯度下降
2 在最低点的左侧梯度值是负数在最低点的右侧梯度值是正数。为什么说是“下降”
3 为什么1—22—3等等的连线不是这条曲线的切线呢而好像是弦线 为何用$y
x^2$函数
这是因为有一种损失函数的形式就是均方差亦即
loss∑i(ai−yi)2loss \sum_{i}(a_i - y_i) ^ 2lossi∑(ai−yi)2
其中a是本次迭代的预测结果y是样本中的真实结果。我们的目的就是在这个函数上求最小值使loss最小这样样本值和预测值就会非常非常接近以便于我们以后预测不在样本中的真实数据。
为什么说是“梯度下降”
“梯度下降”刚接触这个词时我总是往“降低难度”或“降低维度”方面去理解因为有个“下降”的动词在里面。而实际上“下降”在这里面的含义是“与导数相反的方向”的意思。
我们假设上面这个图形的函数是y(x−1)20.001y (x-1)^20.001y(x−1)20.001则y’x2(x−1)y’_x 2(x-1)y’x2(x−1)。 在点B上这个函数的切线绿色是指向下方的Y轴方向所以是个负数假设XBX_BXB 0.1, 则y’2∗(0.1−1)−1.8y’ 2*(0.1-1) -1.8y’2∗(0.1−1)−1.8。 在F点上切线绿色向上假设XFX_FXF 1.5, 则y’2∗(1.5−1)1y’ 2*(1.5-1) 1y’2∗(1.5−1)1是个正数。
而在标准的权重更新公式里
ww–η∗Δww w – η*\Delta{w}ww–η∗Δw
bb–η∗Δbb b – η*\Delta{b}bb–η∗Δb
可以看到无论是w还是b都是用上一次的权重值减去步长×\times×梯度。注意我们在上一个例子中是用b直接加减Δb\Delta{b}Δb的并没有用到η或者说η1。这样的问题就是步长可能过大一下子就跳过了极值点。 当梯度(y’)是正数时即点F的位置xx−η∗1x x - η*1xx−η∗1切线向上x值会变小权重值会从右侧向x1靠近 当梯度(y’)是负数时亦即点B的位置切线向下x值会变大$x x η*(-1.8) x η*1.8$最终运算结果变成了加法与切线方向相反权重值会从左侧向x1靠近。
所以总体上看无论x在极值的左侧还是右侧都会向中间坡底靠拢确实是“下降”了。
不知不觉中我们已经接触到了第一个神经网络中的超参η即步长值这个值对于神经网络训练非常重要决定了训练时间的长短它的取值一般是从0.1到0.0001自己选择。
曲线和弦线的关系 我们先知道了A点的切线的方向亦即黄色的线但是不知道长度 我们有步长值η以及梯度下降公式X1X0–η∗dxX_1 X_0 – η * dxX1X0–η∗dx 因为yx′的导数dx2(X−1),η0.1,X00.2,于是有X1X0–0.1∗2(X0−1)0.36y#x27;_x的导数dx 2(X-1), η 0.1, X_0 0.2, 于是有X_1 X_0–0.1*2(X_0-1) 0.36yx′的导数dx2(X−1),η0.1,X00.2,于是有X1X0–0.1∗2(X0−1)0.36这就等同于我们知道了切线的长度亦即绿色的线的长度和方向都确定了 然后我们可以画出红色的线亦即弦线
所以弦线在这里面没啥用途只是表示一个迭代跳跃的动作而已。实际的变化值已经由绿色的线定义好了。
参考资料
http://colah.github.io/posts/2015-08-Backprop/
点击这里提交问题与建议 联系我们: msraeduhubmicrosoft.com 学习了这么多还没过瘾怎么办欢迎加入“微软 AI 应用开发实战交流群”跟大家一起畅谈AI答疑解惑。扫描下方二维码回复“申请入群”即刻邀请你入群。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90484.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!