| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Chapter 5 Deep Learning -> 正文阅读 |
|
[人工智能]Chapter 5 Deep Learning |
Backpropagation引入话题从前面的学习的梯度下降法我们可以知道: 其中,梯度是个向量 ?那么如何有效得将百万维的向量计算出来,这时候我们就需要使用Backpropagation 所需的数学知识——链式法则情况一:, ? ? ? ? ? ? ?? ? ? ? ? ? ? ? 那么: 情况二:,, ? ? ? ? ? ?? ? ? ? ? ? ? 那么:? 设置一个损失函数:,其中表示与之间的距离,距离越大说明这个神经网络的参数值不好。损失函数对某个参数求微分是 取神经网络中的一部分来说明: ?, Forward pass和Backward pass计算所有的参数的偏导数,叫做Forward pass,图如下: ?计算所有激活功能输入值的偏导数,叫做Backward pass,图如下: 由于z在正向传递( forward pass)中已经确定,所以是一个常数,所以上式就只有和是未知的。因此分情况讨论: ?情况一:红色圈圈位置就是输出层 ?那么:,,所以和求出来了。 情况二:红色圈圈位置不是输出层 ?利用递归的方法,直到找到输出层,从后向前偏导,拿下图举例: 已知了和 所以可以求得,以此向前类推,直到求得?和?。 总结步骤:先求出Forward?pass,后求出Backward pass,两者相乘得出最终的某个参数的偏导数,进而求得损失函数。 ?Tips for Training DNN深度学习的秘诀过拟合并非是我们面临的第一个问题,我们需要确定神经网络在训练数据中是否可以得到一个好的结果,如果没有,重新进行三步走,看看哪步需要做出一些修改;如果有好的结果且在测试数据中没有得到好的结果,那么就可以判断为过拟合。 ?当看到下面这个图,56层的比20层的测试误差更大,就会判定应该是参数过多,出现过拟合。那么事实上真的是这样吗?这个时候我们需要查看训练数据上两者的情况做出正确的判断。 我们从训练数据可以看到56层的神经网络是没有训练好。 new activation function?事实上,层数越多并非意味着最好。 ?特征: ?为了使得输出层的损失值变小,在输入层处添加一个。但是对梯度的影响是越来越小,输出层损失值就不会变很小,例如sigmod函数。 ?sigmod函数:很大变化的输入会产生很小变化的输出,如下: ? ?那么,如何解决这个问题呢? 我们采用的方法是:Rectified Linear Unit(ReLU) 假设a——输出,z——输入,两者之间的关系如下所示: ?选择这样的关系有以下几个理由: (1)计算快 (2)生物上的理由 (3)无穷多的sigmod函数叠加的结果 (4)最重要的是:可以解决梯度问题 ReLU进阶版:Leaky ReLU、Parametric ReLU、Maxout ?PS:Maxout可以得到ReLU,如下图: ? Learnable activation function的特征:? (1)maxout中的激活函数可以是任意分段线性凸函数; (2)多少块取决于一组中有多少个元素。 ?那么,给定训练数据的输入值x,如何得到最大的输出值呢? ?Maxout中,我们在每一步选择最大值(即,红色框框部分),这样我们就可以得到一个细而线性的网络,如下图所示。然后对其训练。 ?Adaptive Learning RateAdagrad: RMSProp:其中可以自行调整 local minima问题?解决办法——Momentum,简单来说,在真实世界中,小球会因为惯性而一直向前,从而度过了局部最低点,从而解决了Momentum。具体见https://blog.csdn.net/qwertyuiop0208/article/details/126348658 Early Stopping?Regularization要最小化的新损失函数,就要找一组不仅使原始损失(例如:最小化平方误差、交叉熵)最小而且接近于零的权重。 权重是在慢慢下降的。 Dropout??每次在更新参数之前,每个神经元都有p%的丢失率,当某个神经元丢失,那么就会失去作用。 ?从而导致网络的结构发生了变化(变得细长),所以要使用新网络进行训练。对于每一个小批,我们对丢失的神经元进行重新取样。 ?而在测试的时候,注意两件事情: (1)不做dropout操作。 (2)如果训练时的丢失率是p%,那么所有的权重需要乘以1-p%。例如丢失率为50%,如果通过训练使权重w=1,则设置w=0.5进行测试。 测试时不做dropout操作的直觉原因: (1)训练时脚上绑了重物,而测试时重物被拿掉,自然就会变得很强。 (2)?当团队合作时,如果每个人都期望合作伙伴会做工作,最终什么也做不成。然而,如果你知道你的伙伴会dropout,你会做得更好。所以在测试时不做dropout操作,所以最终获得了好的结果。 测试时权重要乘以(1-p)%(丢失率)的直觉原因: Dropout is a kind of ensemble: ensemble是训练一堆不同结构的网络 ?在dropout时就会产生很多种网络。不同网络的参数有可能是共用的。 ?举例:输入值为,输出值为。 ?ensemble:输入值有可能被dropout,有可能不被dropout,所以就会产生四种情况。 将这四种情况平均一下得到: 如果我们改变权重,不做dropout,那么也能得到平均后的结果,如下:? Why deep Learning?我们可以看到,参数越多,错误率就越低,网络就越好。 ?那么,同等参数下,是又胖又短的网络(shallow model)还是又瘦又长的网络(deep model)好呢? ?我们可以看到,层数少,参数多的反而没有那么好,这是为什么呢? ?modularization(模块化)?事实上,当我们写写程序时,我们并不会将所有的部分作为主要程序,而是将其模块化,如下: 举个例子:对一个人的判断分为长发女、短发女、长发男、短发男四种。显然,长发男的数据相对其他三种肯定是比较少的,所以将有很少的数据可以拿去训练,那么这个时候该怎么做的? modularization是先进行一个基础的分类:男生or女生、长发or短发。 通过基础分类,就可以训练较少的数据,得到较好的结果。? ?模块化和深度学习关系如下图,模块化是从数据中自动学习的 ?Universality theorem只要有够多的参数,那么就可以代表任何的函数,但是当我们只用一个到一个隐藏层是没有效率的,只有深层结构才更有效。 deep learning 优点深度学习可以解决复杂的问题,例如很相似的输入可能有不同的输出;很不同的输入可能有相同的输出。 ?举例:图像上,可以很清晰得将相同的类归在一起,不同的类分开。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:48:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |