首页 > 其他分享 >[ML&DL] 深度学习的实践层面

[ML&DL] 深度学习的实践层面

时间:2023-04-28 15:45:37浏览次数:39  
标签:DL frac 层面 ML epsilon 正则 梯度 theta parallel

深度学习的实践层面

训练集 验证集 测试集

image-20230317213207097

过程

神经网络的训练是一个需要不断迭代的过程,一般先提出idea,然后编码实现、测试,根据测试结果再次调整思路......

分组与比例

数据集通常分为3个部分:训练集、验证集和测试集

  1. 训练集用于训练模型的参数。
  2. 验证集用于选择最好的模型。
  3. 测试集用于评估训练结果。

一般讲数据集按照60%训练,20%验证和20%测试集来划分。

当数据集的大小达到一百万时,则比例可以调整为98%+1%+1%,因为验证集和测试集实际上不需要太多。

如果超过百万级别,甚至可以调整为99.5%+0.25%+0.25%.

分布

训练集、验证集和测试集应当保证分布一致

防止出现这种情况:在分辨猫图片的模型训练中,如果训练集都是猫的图片,本来训练得很好,但是测试集都是狗的图片,结果得到了很差的评估。


偏差 方差

image-20230317214229080

  • 高偏差:欠拟合
  • 高方差:过拟合

如果出现高偏差问题,一般无法通过增加数据量解决问题。如果出现高方差问题,可以尝试使用正则化。


正则化

一般使用正则化来防止出现过拟合现象。

使用正则化会引入超参数\(\lambda\)。

可以只正则化参数\(W\),因为偏置项\(b\)只是单个数字,正则化的意义不大。

L2正则化

正则项为:

\[\frac{\lambda}{2m}\parallel w \parallel_2^2=\frac{\lambda}{2m}\sum\limits_{j=1}^{n_x}w_j^2 \]

其中\(\parallel w\parallel_2\)为\(w\)的L2范数,也叫欧几里得范数。

L1正则化

使用的是L1范数,会使得模型变得稀疏(部分参数变为0)。

L2正则化是较为常用的。

正则化如何生效?

误差函数\(J\)中加入了正则项,而\(J\)的值又会影响参数的更新。

如果\(\lambda\)太大了,就会导致\(W\)几乎为0,使得模型变得简单,甚至可能欠拟合。

如果\(\lambda\)太小,对\(W\)的修正效果不大,如果原先模型就有过拟合现象,则不能很好的解决问题。

dropout正则化

随机失活,到达某一层的时候,会先遍历该层结点,以一定的概率(超参数)决定是否将其失活。

通过随机失活可以避免一些\(W\)变得太大,导致过拟合。

使用dropout正则化之前,\(a\)的原本值假设是100,使用dropout正则化之后,如果存活概率设置为80%,那么\(a\)的值可能变为80,为了保持数值,应该计算a=a/0.8

实施dropout正则化的相关知识:

  • 每层的存活率可以设置不同值,做出相应调整,但是会引入较多超参数。
  • 通常存活率不能设置太低,最好接近1,甚至大多数时候是不需要失活的,某些层直接设置为1。

其它正则化方法

  1. 数据扩增

    如果数据集是图像,可以考虑通过旋转,翻转等操作来扩增数据集。

  2. early stopping

    有时候迭代次数太多反而得到较差的结果,提前结束训练可以得到较好结果。

    image-20230317230754686

归一化

可以使数据分布得更”均匀“

思路和标准化正态分布是一致的:

  1. 求均值。
  2. 求方差。
  3. \(X:=\frac{X-\mu}{\sigma^2}\)

归一化可以提高训练速度。


梯度爆炸和梯度消失

这个问题通常发生在层数较多的神经网络。

梯度爆炸:如果每个权重\(W\)都大于1,那么不断地乘上\(W\),到最后输出值会变得非常大。

​ 这种情况下,可能导致\(W\)的值越来越大,最后甚至溢出为NaN.

梯度消失:如果每个权重\(W\)都小于1,那么不断地乘上\(W\),到最后输出值会变得非常小。

​ 这种情况下,可能因为梯度太小,导致梯度下降速度缓慢。


权重初始化

合理的权重初始化可以缓解梯度爆炸和梯度消失带来的痛点。

image-20230318102033668

对于上图这种简单案例,有:

\[z = \sum\limits_{i=1}^nw_ix_i \]

可以考虑将权重初始化为:

\[w_i=\frac{1}{n} \]

其它激活函数

  • 如果使用的是Relu,则建议\(w_i=\frac{2}{n}\)

  • 如果使用的是\(\tanh\),则建议\(w_i=\sqrt{\frac{1}{n}}\)


梯度的数值逼近

联系导数与导数的近似值即可:

  • \(f'(x)=\lim\limits_{\epsilon\to0}\frac{f(x+\epsilon)-f(x-\epsilon)}{2\epsilon}\)

  • \(f'(x)\approx\frac{f(x+\epsilon)-f(x-\epsilon)}{2\epsilon}\)


梯度检验

  • 将\(W\)和\(b\)都扁平化组合起来,形成一个向量\(\theta\)
  • 将\(dW\)和\(db\)都扁平化组合起来,形成一个向量\(d\theta\)

则误差函数\(J(W,b)\)可以记为\(J(\theta)\).

对于向量\(\theta\)的每一项\(\theta_i\),我们可以计算其近似值:

\[d\theta_{approx}[i]=\frac{J(\theta_1,\theta_2,\cdots,\theta_i+\epsilon,\cdots)-J(\theta_1,\theta_2,\cdots,\theta_i-\epsilon,\cdots)}{2\epsilon} \]

这个近似值应该接近它的真实值:\(d\theta[i]\)

评估指标

\[\frac{\parallel d\theta_{approx}-d\theta\parallel_2}{ \parallel d\theta_{approx}\parallel_2 +\parallel d\theta\parallel_2 } \]

分子部分:欧几里得范数,计算两个向量”终点“之间的”距离“。

分母部分:防止分子数值相差过大,分母将这个指标变成一种”比率“。

参考数值

  • 如果指标的数量级为\(10^{-7}\),则是好的结果。
  • 如果指标的数量级为\(10^{-5}\),中规中矩,可能有问题。
  • 如果指标的数量级为\(10^{-3}\),则是坏的结果,需要调整。

注意事项

  1. 不要在训练中使用梯度检验,只用于调试。
  2. 如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出 bug。
  3. 梯度检验不能与dropout同时使用,因为每次迭代过程中,dropout会随机消除隐藏层单元的不同子集,难以计算dropout在梯度下降上的代价函数\(J\)

标签:DL,frac,层面,ML,epsilon,正则,梯度,theta,parallel
From: https://www.cnblogs.com/feixianxing/p/deep-learning-practice.html

相关文章

  • 简单理解Collections.synchronizedList
    转:简单理解Collections.synchronizedListsynchronizedList中的listIterator和listIterator(intindex)方法并没有做同步处理,遍历的时候需要加锁 编译后的class   ......
  • ML-集成学习
    集成学习根据个体学习器的生成方式分为Bagging和Boosting两大类。Bagging的个体学习器之间不存在强依赖关系,Boosting存在强依赖关系。Bagging可以同时生成的并行化方法,Boosting必须串行化生成的序列化方法。BaggingBootstrapaggregating,即使用自主采样法来构造基学习器。Bag......
  • API 架构风格演化史:CORBA-XMLRPC(SOAP)-REST-JSONRPC-GraphQL-gRPC
    我们先来看一张 TwitterArchitecture2022CodeFirstv.sAPIFirst软件开发理念的改变下图显示了代码优先开发和API优先开发之间的差异。为什么我们要考虑API优先设计?微服务增加了系统的复杂性。我们有单独的服务来服务系统的不同功能。尽管这种体系结构促进了职责的脱钩和分......
  • esp32 墨水屏 html 上位机程序 传图
    使用esp32开发墨水屏显示图片这里的墨水屏工具为我自己制作的,使用esp32c3和2.9寸墨水屏,你如果使用的是自己的,请更换墨水屏驱动代码,引脚定义和图片尺寸在之前的demo演示中,我展示了使用esp32c3配合墨水屏展示HelloWorld!的一个程序。有朋友问我,墨水屏可以展示图片......
  • 网页截图,html2canvas简单示例
     <divid="box"><p>asd4a5s6fa6s5f1asf</p><imgstyle="width:200px"src="xxxxxx.png"/><buttonstyle="width:100px;height:30px"onclick="prtsc()">pr......
  • Python-运行库报错“ImportError: DLL load failed: 找不到指定的模块。”
    1.看到这个报错的一瞬间,以为是Pycharm有问题,加上公司的电脑,对于2020以后的版本的不适用,以为是Pycharm需要有改动。但是大费周章(不断安装卸载Pycharm)以后,依旧没有任何的改变。百度以后,说是第三方库的某个模块没有,让卸载三方库,重新安装。尝试过以后没有用。2.思考了两天,突然想到,这......
  • 从零开始构建HTML 5 Web页面
    HTML5是时下Web开发领域炒得火热的一个术语,是的,很多人都看好它,也有很多业内知名公司开始正式使用HTML5重新构建自己的网站,如YouTube开始使用HTML5视频,Google已经弃用自家的Gears,开始全面拥抱HTML5实现离线解决方案,各大浏览器厂家也纷纷开始支持HTML5,连被人诟病的微软也声称要......
  • 认识HTML5的WebSocket
    在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocketAPI。WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看HTML5的WebSocketAPI:它可用于客户端、服务器......
  • cshtml和html的区别从语法和功能上来看
    https://www.lookxue.com/blog/o61302ve.htmlcshtml和html的区别:1.cshtml是一种混合式的文件,它将html、javascript和C#代码结合在一起,而html只是一种纯静态的文件;2.cshtml可以使用C#代码进行逻辑处理,而html不能;3.cshtml中可以使用Razor语法,而html中不能;4.cshtml可以使用@......
  • html表格相关属性
    <!DOCTYPEhtml><html>   <head>      <metacharset="UTF-8">      <title>表头标签</title>   </head>   <body>      <tablealign="center"border="1"cellpadding="0"......