背景
深度学习属于机器学习,机器学习的三个步骤就是:模型,策略和计算方法。比如LR,模型使用的LR模型(LR是基于伯努利假设,伯努利属于指数分布族,指数分布族属于广义线性模型),策略使用的是联合概率分布最大,计算方法是梯度下降法或拟牛顿法等。
深度学习的模型是神经网络,如下图:
![cd6bebdb4a5e72ab90a42cf312af45de.png](https://i-blog.csdnimg.cn/blog_migrate/dca2b8fc41ebebf47d20b8e277db7f54.jpeg)
策略就是我们说的损失函数,cost function,反映了模型的预测误差,如交叉熵、均方误差等。给定N个训练数据集:
![21779d6e2b75c631537d26daacb75b1f.gif](https://i-blog.csdnimg.cn/blog_migrate/da41dfd60dfc0815227f445a1af01730.gif)
基于训练集找到一组最佳的参数
![5228b8dea1dd4247fc588d3d93d9b0f1.gif](https://i-blog.csdnimg.cn/blog_migrate/eea12c65ace7d9ddcd94707eb747165c.gif)
使得C(θ)最小;
![4a0324c2693d3b2532d2139fe37c70f3.gif](https://i-blog.csdnimg.cn/blog_migrate/6838a8851c64986e8b6510d5689e1a6b.gif)
![ba6a3078ea79aec07034a4cf9e7c421c.gif](https://i-blog.csdnimg.cn/blog_migrate/5baac220aa5edf72071cf5894aebff73.gif)
![3e17742f08004a8593287920998ef7b7.gif](https://i-blog.csdnimg.cn/blog_migrate/199881455c57ade0f3be64f2fee1ce75.gif)
具体表示方法是什么?这就需要明白神经网络模型如何表示的,如下图所示,对于l层来说:
![f3ddf1176a798d6239a8ac8f23fa8279.png](https://i-blog.csdnimg.cn/blog_migrate/90c64cc1aef80cd5a3040a0012df84f6.jpeg)
第l层的第i个神经元的输入Zi,它是上一层所有神经元的输入之和:
![c6318797fdd2c4587c7c1e575d58d377.gif](https://i-blog.csdnimg.cn/blog_migrate/b309d5409ad4ee82f2d893b0eedff5d4.gif)
第l层的第i个神经元的输出ai,是zi经过非线性变化(我们称为激活函数,如ReLu,sigmoid等):
![744b2b5509be1f2707bb943be806674f.gif](https://i-blog.csdnimg.cn/blog_migrate/82a1ed92074daaa447878069423001a4.gif)
因此,我们说的θ就是所有的
![2b84a4c4378ca0541452e3af1b32400d.gif](https://i-blog.csdnimg.cn/blog_migrate/7c43114e619c8dfb6b71f0da03d3d967.gif)
,则损失函数的偏导
![3e17742f08004a8593287920998ef7b7.gif](https://i-blog.csdnimg.cn/blog_migrate/199881455c57ade0f3be64f2fee1ce75.gif)
就是求出所有的
![46c7061496eea3f21e6043fa6d94ee15.gif](https://i-blog.csdnimg.cn/blog_migrate/510fe4f4f0affd01e706d104d127e41d.gif)
和
![93a568201b0387e2d1e185fe30a53115.gif](https://i-blog.csdnimg.cn/blog_migrate/722b93d5a481295c983d90009dc944fc.gif)
。
一般地,我们求出
![46c7061496eea3f21e6043fa6d94ee15.gif](https://i-blog.csdnimg.cn/blog_migrate/510fe4f4f0affd01e706d104d127e41d.gif)
和
![93a568201b0387e2d1e185fe30a53115.gif](https://i-blog.csdnimg.cn/blog_migrate/722b93d5a481295c983d90009dc944fc.gif)
,会更新参数,即
![91b9f719f292dd82715cce83859eaaba.gif](https://i-blog.csdnimg.cn/blog_migrate/34d482067d616214e17fd0f8641a281e.gif)
。但神经网络的参数非常多,比如很简单的alexnet的参数个数在千万级别,一个一个地求是不切实际的,所以,这里需要用到反向传播:back propagation!
反向传播优化模型参数
![46c7061496eea3f21e6043fa6d94ee15.gif](https://i-blog.csdnimg.cn/blog_migrate/510fe4f4f0affd01e706d104d127e41d.gif)
求解之前,需要了解一下链式法则,就是g(f(x))对x的求导,会等于 g对f的求导 乘 f对x的求导。由于z是w的函数,所以:
![9aae6691896d30cecc4bfc7958abc6ea.gif](https://i-blog.csdnimg.cn/blog_migrate/849a972f5db3a8b4430c84e1c85e2f91.gif)
![ba505a0519ab27608b5fe600b8d61956.gif](https://i-blog.csdnimg.cn/blog_migrate/52202cf6221a37c162a87fcff1002744.gif)
![8e21c548679e3ed7a517d168a2ac7434.gif](https://i-blog.csdnimg.cn/blog_migrate/e0755cd392b4202d16071ff254effbae.gif)
可以通过前向传播求出(即,是已知的不用求)
接下来求解
![dae4ebba0d79bd9af07192c763435d93.gif](https://i-blog.csdnimg.cn/blog_migrate/c277d70e5f1ab4130fca28f8ffd6f625.gif)
。令
![a50d66b2c839c649882550240ec3a002.gif](https://i-blog.csdnimg.cn/blog_migrate/55b9ddad613d702b378a96c6d09d4697.gif)
表示
![dae4ebba0d79bd9af07192c763435d93.gif](https://i-blog.csdnimg.cn/blog_migrate/c277d70e5f1ab4130fca28f8ffd6f625.gif)
,(不表示也可以,它有对应的实际的意义,不知道实际的意义也没关系,因为这是我们一步一步推导下来的)。求解
![a50d66b2c839c649882550240ec3a002.gif](https://i-blog.csdnimg.cn/blog_migrate/55b9ddad613d702b378a96c6d09d4697.gif)
会比较困难,因为
![a50d66b2c839c649882550240ec3a002.gif](https://i-blog.csdnimg.cn/blog_migrate/55b9ddad613d702b378a96c6d09d4697.gif)
-->
![0a4b54ede2270404796108e6dfec195a.gif](https://i-blog.csdnimg.cn/blog_migrate/5aa1532dd92ff0cce5651d2de600d5ec.gif)
-->...-->
![069f540f207b39ea4d2142edf4eaf116.gif](https://i-blog.csdnimg.cn/blog_migrate/3999b34dc0a756646a24902c64aaab84.gif)
。这是层层传递下去的。
如果,我们能够知道如何层层传递,即l层第i个神经元
![a50d66b2c839c649882550240ec3a002.gif](https://i-blog.csdnimg.cn/blog_migrate/55b9ddad613d702b378a96c6d09d4697.gif)
和l+1层
![0a4b54ede2270404796108e6dfec195a.gif](https://i-blog.csdnimg.cn/blog_migrate/5aa1532dd92ff0cce5651d2de600d5ec.gif)
(会影响所有神经元)的关系,然后又能算出最后一层L的
![069f540f207b39ea4d2142edf4eaf116.gif](https://i-blog.csdnimg.cn/blog_migrate/3999b34dc0a756646a24902c64aaab84.gif)
,是不是就可以了?所以,我们需要解决2个问题:
(1)最后一层L的
![069f540f207b39ea4d2142edf4eaf116.gif](https://i-blog.csdnimg.cn/blog_migrate/3999b34dc0a756646a24902c64aaab84.gif)
如何计算?
(2)
![a50d66b2c839c649882550240ec3a002.gif](https://i-blog.csdnimg.cn/blog_migrate/55b9ddad613d702b378a96c6d09d4697.gif)
和
![0a4b54ede2270404796108e6dfec195a.gif](https://i-blog.csdnimg.cn/blog_migrate/5aa1532dd92ff0cce5651d2de600d5ec.gif)
的关系?
![8337374beddd0ad74b20183c78a9ce58.png](https://i-blog.csdnimg.cn/blog_migrate/f699e454fa51e36df53e6f74cd211834.jpeg)
对于问题(1),
![069f540f207b39ea4d2142edf4eaf116.gif](https://i-blog.csdnimg.cn/blog_migrate/3999b34dc0a756646a24902c64aaab84.gif)
是一个向量,我们看看如何求其中一个值n,
![5a510d599fdf645b6079194a51d0e19a.gif](https://i-blog.csdnimg.cn/blog_migrate/9c33564b7f9dd46b385b8969c823d0c3.gif)
, 而
![cd3b0ac7b7ac375848f439e349e3c50e.gif](https://i-blog.csdnimg.cn/blog_migrate/4a4b5bfbc96e67ccd6872d9dcf036ff3.gif)
就是最后的输出值
![9a2037c7995512da48ac950d1a1546c8.gif](https://i-blog.csdnimg.cn/blog_migrate/570b35159f0f4a421463575d01bac8b5.gif)
(对于多分类问题,比如分10类,最后一层的节点数是10个,激活函数是softmax)
![16595309f08b5ec20fad2efa632d57db.gif](https://i-blog.csdnimg.cn/blog_migrate/92c3e79fdeceb726eff011cd682d6353.gif)
,
![97b9905457eae22f4efdc4c4104b9432.gif](https://i-blog.csdnimg.cn/blog_migrate/142b0e9ec0c07b80585be6cedde45f60.gif)
为最后一层采用的激活函数(多分类一般是softmax),
![1bf5ccab1c3cc73763429ef3f93c84c1.gif](https://i-blog.csdnimg.cn/blog_migrate/39f3eaacb9e88d239e9d4cc680f381b3.gif)
是激活函数的一级导数。
![2ef0b119a4ddcb10339c9204f3d800ae.gif](https://i-blog.csdnimg.cn/blog_migrate/3acc7a3bdb5cc4f5e93e86072047afcd.gif)
取决于采用的损失函数,如果采用的是均方误差,则
![c6908b727bb432988e0f968b60feb4f0.gif](https://i-blog.csdnimg.cn/blog_migrate/d591b832352b1ded559c76ee5399ac7e.gif)
(能够直接得到)
综上:
![e2c2dab17493e71865429c6238500c0e.gif](https://i-blog.csdnimg.cn/blog_migrate/0155dbb0144d56f577bb45b2ffb58896.gif)
可以求得。
对于问题(2),第l层的第i个神经元是如何影响到l+1层所有的神经元呢?
![34545334c00d48c6c9bf8e47729cfde5.gif](https://i-blog.csdnimg.cn/blog_migrate/b522670b720f8a565e64bc15cbd1a3b6.gif)
![b750be6e2e4fc9d79b0f4040923006ba.gif](https://i-blog.csdnimg.cn/blog_migrate/1691d190f6a033c2e951626933af39a0.gif)
,
![97b9905457eae22f4efdc4c4104b9432.gif](https://i-blog.csdnimg.cn/blog_migrate/142b0e9ec0c07b80585be6cedde45f60.gif)
为激活函数(一般是ReLu),
![1bf5ccab1c3cc73763429ef3f93c84c1.gif](https://i-blog.csdnimg.cn/blog_migrate/39f3eaacb9e88d239e9d4cc680f381b3.gif)
是激活函数的一级导数,可以直接求得。
![f2be288f1ae5ab7f76e5b0476b006943.gif](https://i-blog.csdnimg.cn/blog_migrate/b770b25efc81c265df02b43d68776f2c.gif)
如何求?可以这么理解,
![a2bd9ba34e6e6c7ea0515bec8527d82f.gif](https://i-blog.csdnimg.cn/blog_migrate/e1f1ff8c2ae9eccbe1071d5227c8e260.gif)
会影响[
![c1dadfecc2edb313f54973cbb12a47d0.gif](https://i-blog.csdnimg.cn/blog_migrate/9fc75f8bb4b6ae4ee506c79a5a5bf62d.gif)
],而[
![c1dadfecc2edb313f54973cbb12a47d0.gif](https://i-blog.csdnimg.cn/blog_migrate/9fc75f8bb4b6ae4ee506c79a5a5bf62d.gif)
]影响C(θ)。
![ad69e606cd0b53e8ea5a469cec971322.gif](https://i-blog.csdnimg.cn/blog_migrate/bf7cb924e20249b61920ccbf7adbc9a5.gif)
![500b673086245c5492cb179498839dae.png](https://i-blog.csdnimg.cn/blog_migrate/f5b8af70cf3327b6a6dd34ea00836d1c.jpeg)
![fba5691ce2dbe286b99442437b78805a.png](https://i-blog.csdnimg.cn/blog_migrate/84168ea96d5348e71d76559f412e730b.jpeg)
![eefe8ab9bde5fdde491a0e7e172ed5b8.gif](https://i-blog.csdnimg.cn/blog_migrate/a06a30c58896726a73970129b85d04fa.gif)
综上:
![9fde5fa8ab81445f9e919fdb34740121.gif](https://i-blog.csdnimg.cn/blog_migrate/60efbc353054096c27cbfbfc93d80ff1.gif)
总结
额?辛苦码的那么多,不知道怎么没了,好吧,再打一遍吧~
神经网络的训练说白了就是给你N个训练集,然后让你选择一组参数θ使得在这N个训练集上的损失C(θ)最小。如果找到这组参数呢?用梯度下降法找到这些参数。
梯度下降法就是随机取一组参数,然后每次迭代都朝下降最快的方向更新,即:
![9d6426832f0206f44e4c29c28a18cb2d.gif](https://i-blog.csdnimg.cn/blog_migrate/ac3c8871d882cf9e283fc317b7411232.gif)
有因为θ其实是由很多的参数组成,这些参数分别是权重w和偏差b,权重
![aeb83011078ff23c78420700bd01f3bd.gif](https://i-blog.csdnimg.cn/blog_migrate/6f01de7ae43e11d198ee424d37bd1042.gif)
表示第l-1层的第j个神经元的输出,对第l层的第i个神经元的输入的贡献。
![06e6a23d887b93518a32713c63bce460.gif](https://i-blog.csdnimg.cn/blog_migrate/41dc0467d14b085405582be8f6a6582d.gif)
![6ccf97b1dd83a9ef78c677bd72d4cb86.gif](https://i-blog.csdnimg.cn/blog_migrate/54830512ba7fca9c379a55f10502cfde.gif)
根据推导,前者等于
![ba65100527bc6b6e7229107688b3362b.gif](https://i-blog.csdnimg.cn/blog_migrate/1d15fa79b4f4b5f595639fcc9a9e64a9.gif)
,可通过反向传递求得,后者等于
![8e21c548679e3ed7a517d168a2ac7434.gif](https://i-blog.csdnimg.cn/blog_migrate/e0755cd392b4202d16071ff254effbae.gif)
后者通过前向传播求得,如下图所示:
![03b8b7a6b049242aa24756e590009242.png](https://i-blog.csdnimg.cn/blog_migrate/357325acd201193c034b7a3af8b69dac.jpeg)