深度学习-学习率调度,正则化,dropout

news/2024/10/23 7:21:06/

正如前面我所说的,各种优化函数也依赖于学习率,保持学习率恒定总是有所限制,在执行梯度下降过程中,我们可以使用各种方法来调节训练过程的学习率,这里只是稍微介绍一下,不会写代码实现的。同时,顺便几种其他的手段防止过拟合。


1.学习率调度

(1).幂调度,学习率随着迭代次数下降,而下降的指数为幂指数,幂指数可以为1

\eta=\eta_0/(1+t/s)^c

c就是幂指数,一般取1,t代表迭代次数,s是超参数,\eta_0代表初始的学习率

(2).指数调度

\eta(t)=\eta_00.1^{t/s}

随着迭代的输出减少

(3)分段恒定调度

对一些轮数使用一个固定的学习率,到了另外一些使用较小的学习率

(4).性能调度

没N次查看一次误差,当误差下降的时候,减少学习率

(5)一周期调度1

在最开始的训练周期中,将学习率线性提高,然后再线性降低到原来的学习率,在后面的几个轮次中降低几个数量级。

在tensorflow中都有相应的方法


2.正则化

如果懂得线性回归,这个就很容易理解,使用L1正则化和L2正则化在线性回归中很常见,分别式LOASS回归和岭回归。神经网络一样有这两种正则化方式,用来限制Omega的调整范围,L1正则化用来稀疏模型,他会使得参数为0。L2正则化会使参数很小。L1正则化适合做特征选择,模型剪枝,L2正则化适合提升模型泛化。


 

3.dropout

这种方法目前没有合理的解释,深度学习的很多理论好像本来无法解释,所以不要在意这些了,在一些先进的网络里面用这个技术,也很得到不错的提升。

这个算法很简单,就是在每个训练迭代过程中,每次都"删除"一些神经元,每个神经元被删除的概率为p,删除之后,就没有信号从它这里流过去了,但是下一次它可能又会出现。

这个算法只会在训练过程中使用,在预测的适合,所有的神经元都要处于活动状态。

有一个问题,预测过程中,每个神经元都承担了平时1/p的信号量,那么相对的,就要在训练结束后,让他们的输入参数乘以p,或者输出参数乘以1/p,两者效果等价。


还有两个比较小众的方法写在下面,一个式蒙特卡洛dropout,一个是最大正则化。

(1)蒙特卡洛dropout会在测试期间使得dropout继续运行,对测试集多次重复预测,得到一个结果,然后除以重复的次数,就能得到一个预测概率和置信区间,这么看确实比较合理,可以用来做风险评估。

(2).最大正则化算法是使用L2正则化,限制传入连接的权重w,使得||w||_2\leq r,r是你设定的常数,这个算法不会使用到误差函数更新,而是将每次的传入权重进行缩放,使之满足条件。


http://www.ppmy.cn/news/1126700.html

相关文章

pip install open-interpreter报错,无法安装

标题pip install open-interpreter报错,无法安装 ERROR: Could not find a version that satisfies the requirement open-interpreter (from versions: none) ERROR: No matching distribution found for open-interpreter 另外发现自己换了很多国内镜像源&#x…

C++ Primer----1.5类简介 章节练习

头文件 Sales_item.h #ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string>class Sales_item{ public:Sales_item(const std::string &book):isbn(book),units_sold(0),revenue(0.0){}Sales_item(std::istream &is){ is >&…

使用Python做一个微信机器人

介绍 简介 该程序将微信的内部功能提取出来&#xff0c;然后在程序里加载Python&#xff0c;接着将这些功能导出成库函数&#xff0c;就可以在Python里使用这些函数 程序启动的时候会执行py_code目录下的main.py&#xff0c;类似于你在命令行使用python main.py。 现在会以…

CasaOS:一个docker容器应用的可视化Portal

CasaOS 官网声称他是一个家庭云操作系统&#xff0c;但我实际使用后感觉称之为“docker容器的可视化Portal”更合适。因为它本身不具备IAAS、PAAS、或SAAS的开箱即用能力&#xff0c;更像是一个把OS上的docker Container集中管理并展示的索引目录&#xff0c;各个docker Contai…

LetCode算法题

注:大佬解答来自LetCode官方题解 88.合并两个有序数组 1.题目 2.个人解答 var merge function (nums1, m, nums2, n) {//合并for (let i 0; i < n; i) {nums1[i m] nums2[i];}// 排序&#xff08;冒泡排序&#xff09;for (let i 0; i < m n; i) {for (let j 0…

git 查看当前版本号

你看&#xff0c;那个人好像一条狗哎。 ——周星驰 《大话西游》 要查看当前 Git 仓库的版本号&#xff0c;您可以使用以下命令&#xff1a; git log --oneline -n 1 这会显示最近一次的提交信息&#xff0c;包括提交的哈希值&#xff08;版本号&#xff09;和提交的摘要信息…

进程、线程、协程相关知识积累

1.进程、线程、协程的区别 &#xff08;1&#xff09;进程是程序一次动态执行的过程&#xff0c;是程序运行的基本单位。操作系统会以进程为单位&#xff0c;分配系统资源&#xff08;CPU时间片、内存等资源&#xff09;&#xff0c;进程是资源分配的最小单位。 进程占据独立…

Java Matcher对象中 find() 与 matches() 的区别

find()&#xff1a;字符串某个部分匹配上正则表达式就会返回true matches()&#xff1a;整个字符串都匹配上正则表达式才返回true&#xff0c;否则false 参考&#xff1a;Java Matcher对象中find()与matches()的区别 参考&#xff1a;Pattern隐藏了哪些Java8追加的新功能 参考&…