IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 深度学习03:Tips for Deep Learning -> 正文阅读

[人工智能]深度学习03:Tips for Deep Learning


深度学习理论系列:
深度学习01
深度学习02:CNN

1 做deep learning的流程

  • define the function set(network structure)
  • goodness of function(loss function – cross entropy)
  • pick the best function(gradient descent – optimization)
    在这里插入图片描述
    ??做完这些事情以后,你会得到一个neural network,然后要做的事情是提高model在training set上的正确率。如果训练集效果不好,那模型存在欠拟合。训练集效果较好后,检测在测试集上的表现,假如结果不好,模型存在过拟合。当针对测试集进行一些调整以克服overfitting后需要把这个模型放入训练集中,看看表现是否变坏。因此在deep learning里面,有两个问题:欠拟合和过拟合。
    ??针对欠拟合:新的激活函数、adaptive learning rate
    ??针对过拟合:early stopping、regulation、dropout
    在这里插入图片描述

2 欠拟合对策

2.1 New activation function

2.1.1 Gradient Problem(梯度消失)

??在全连接网络中,如果我们选择的激活函数是sigmod,那么越deep,就越容易发生梯度消失的情况。我们随机选择了几个初始的参数值,然后没怎么训练模型就停止了。数学推导如下:
在这里插入图片描述
从sigmoid图像中可知,如果out8接近于1,那1-out8接近于0,out8(1-out8)很小,更何况这个很小的数还要和 O7 * (1-O7) ,O6 * (1-O6) 。。。。O1 * (1-O1) 这些小数相乘,那就更小了。所以也许靠近输出层的那几层梯度下降也许比较ok,但是靠近输入层的梯度下降肯定没这么快。

2.1.2 ReLU

??解决梯度消失的办法就是ReLU,该函数形状如下图所示,z为input,a为output,如果input>0则output = input,如果input<0则output = 0。output=0的neuron对整个network是没有任何作用的,因此可以把它们从network中拿掉。output=input的好处是不会像sigmoid function一样使input产生的影响逐层递减。
在这里插入图片描述
??Leaky ReLU:当input<0的时候,微分后还能有一点点的值,比如令a = 0.01z,这个东西就叫做Leaky ReLU
在这里插入图片描述

2.1.3 Maxout

??假设现在有input x 1 x_{1} x1? , x 2 x_{2} x2? ,它们乘上几组不同的weight分别得到5,7,-1,1,这些值本来是不同neuron的input,它们要通过activation function变为neuron的output;但在Maxout network里,我们事先决定好将某几个“neuron”的input分为一个group,比如5,7分为一个group,然后在这个group里选取一个最大值7作为output
在这里插入图片描述
Maxout -> RELU
??下图左上角是一个ReLU的neuron,它的input x会乘上neuron的weight w,再加上bias b,然后通过activation function-ReLU,得到output a。neuron的input为z = w x + b,为下图左下角蓝线,neuron的output为a = z ( z > 0 ) ; a = 0 ( z < 0 ),为下图左下角绿线。
??如果我们使用的是上图右上角所示的Maxout network,假设z 1的参数w和b与ReLU的参数一致,而z2 的参数w和b全部设为0,然后做Max Pooling,选取z 1 , z 2 较大值作为a。neuron的input为[ z1 z2]。z1 = wx + b,为下图右下角蓝线,z2=0,为上图右下角红线
neuron的output为max[z1 z2]为下图右下角绿线
在这里插入图片描述
Maxout -> More than ReLU
在这里插入图片描述
Maxout不同的形状
??Maxout可以实现任何piecewise linear convex activation function(分段线性凸激活函数),其中这个activation function被分为多少段,取决于你把多少个element z放到一个group里,下图分别是2个element一组和3个element一组的activation function的不同形状
在这里插入图片描述
如何训练maxout
其实Max operation就是linear的operation,只是它仅接在前面这个group里的某一个element上,因此我们可以把那些并没有被Max连接到的element通通拿掉,从而得到一个比较细长的linear network
在这里插入图片描述

2.2 Adaptive learning rate

2.2.1 Adagrad

若某个方向比较平缓则用大的learning rate,如果比较陡峭则用小的learning rate。
在这里插入图片描述

2.2.2 Momentum

??常用mini-batch SGD训练算法,然而虽然这种算法能够带来很好的训练速度,但是在到达最优点的时候并不能够总是真正到达最优点,而是在最优点附近徘徊。另一个缺点就是这种算法需要我们挑选一个合适的学习率,当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点。我们所希望的仅仅是网络在优化的时候网络的损失函数有一个很好的收敛速度同时又不至于摆动幅度太大

指数加权平均数

??假定我们有一堆数据 θ 0 \theta_{0} θ0?, θ 1 \theta_{1} θ1?,…, θ n \theta_{n} θn?,那么,我们根据这些数据来拟合一条曲线,所得的值 v t v_{t} vt?就是如下的公式:
v t = β v t ? 1 + ( 1 ? β ) θ t v_{t}=\beta v_{t-1}+(1-\beta)\theta_{t} vt?=βvt?1?+(1?β)θt?,在计算时可视 v t v_{t} vt?大概是 1 1 ? β \frac{1}{1-\beta} 1?β1?的每日温度,如果是0.9,可视为十天的平均值。

Momentum
??Momentum基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新你的权重。
v d w = β v d w + ( 1 ? β ) d W v_{dw}=βv_{dw}+(1?β)dW vdw?=βvdw?+(1?β)dW (1) 式中第一项表示惯性的方向,第二项表示梯度方向,两个合力就是接下来要走的负方向。
v d b = β v d b + ( 1 ? β ) d b v_{db}=βv_{db}+(1?β)db vdb?=βvdb?+(1?β)db (2)
W = W ? α v d w W=W?αv_{dw} W=W?αvdw? (3)
b = b ? α v d b b=b?αv_{db} b=b?αvdb? (4)
(1)和(2)分别是损失函数在前t?1轮迭代过程中累积的梯度梯度动量,一般 β β β =0.9,即平均了前十次迭代的梯度。

2.2.2 RMSProp

RMSProp算法对权重 W 和偏置 b 的梯度使用了微分平方加权平均数。
其中,假设在第 tt 轮迭代过程中,各个公式如下所示:
s d w = β s d w + ( 1 ? β ) d W 2 s_{dw}=βs_{dw}+(1?β)dW^2 sdw?=βsdw?+(1?β)dW2
s d b = β s d b + ( 1 ? β ) d b 2 s_{db}=βs_{db}+(1?β)db^2 sdb?=βsdb?+(1?β)db2
W = W ? α s d w + ε d W W=W?\frac{α}{\sqrt{s_{dw}}+ε}dW W=W?sdw? ?+εα?dW
b = b ? α s d b + ε d b b=b?\frac{α}{\sqrt{s_{db}}+ε}db b=b?sdb? ?+εα?db
??在上面的公式中 s d w s_{dw} sdw? s d b s_{db} sdb?分别是损失函数在前 t?1轮迭代过程中累积的梯度梯度动量, β是梯度累积的一个指数。所不同的是,RMSProp算法对梯度计算了 微分平方加权平均数。这种做法有利于消除了摆动幅度大的方向,用来修正摆动幅度,使得各个维度的摆动幅度都较小。另一方面也使得网络函数收敛更快。(比如当 dW 或者 db中有一个值比较大的时候,那么我们在更新权重或者偏置的时候除以它之前累积的梯度的平方根,这样就可以使得更新幅度变小)。为了防止分母为零,使用了一个很小的数值 ? 来进行平滑,一般取值为 1 0 ? 8 10^{?8} 10?8

2.2.3 Adam

??momentum是优化梯度的方向,RMSProp是为了动态调整学习率,Adam优化算法基本上就是将Momentum和RMSprop结合在一起。具体过程如下:
在这里插入图片描述

3 过拟合对策

3.1 early stopping

??假设你今天的learning rate调的比较好,那随着训练的进行,total loss通常会越来越小,但是Training set和Testing set的情况并不是完全一样的,很有可能当你在Training set上的loss逐渐减小的时候,在Testing set上的loss反而上升了

??所以,理想上假如你知道testing data上的loss变化情况,你会在testing set的loss最小的时候停下来,而不是在training set的loss最小的时候停下来;但testing set实际上是未知的东西,所以我们需要用validation set来替代它去做这件事情
在这里插入图片描述

3.2 Regularization

L1正则和L2正则

3.3 Dropout

??在training的时候,每次update参数之前,我们对每一个neuron(也包括input layer的“neuron”)做sampling(抽样) ,每个neuron都有p%的几率会被丢掉,如果某个neuron被丢掉的话,跟它相连的weight也都要被丢掉
??就是每次update参数之前都通过抽样只保留network中的一部分neuron来做训练
在这里插入图片描述
??每次update参数之前都要做一遍sampling,所以每次update参数的时候,拿来training的network structure都是不一样的。Maxout是每一笔data对应的network structure不同,而Dropout是每一次update的network structure都是不同的(每一个minibatch对应着一次update,而一个minibatch里含有很多笔data)
??当你在training的时候使用dropout,得到的performance其实是会变差的,因为某些neuron在training的时候莫名其妙就会消失不见,但这并不是问题,因为:Dropout真正要做的事情,就是要让你在training set上的结果变差,但是在testing set上的结果是变好的
所以如果你今天遇到的问题是在training set上得到的performance不够好,你再加dropout,就只会越做越差。
testing:
在使用dropout方法做testing的时候要注意两件事情:

  • testing的时候不做dropout,所有的neuron都要被用到
  • 假设在training的时候,dropout rate是p%,从training data中被learn出来的所有weight都要乘上(1-p%)才能被当做testing的weight使用
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:46:04  更:2021-12-23 15:47:11 
 
开发: 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/26 23:41:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码