02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面

文章目录

    • 1. 训练,验证,测试集
    • 2. 偏差,方差
    • 3. 机器学习基础
    • 4. 正则化
    • 5. 为什么正则化预防过拟合
    • 6. dropout(随机失活)正则化
    • 7. 理解 dropout
    • 8. 其他正则化
    • 9. 归一化输入
    • 10. 梯度消失 / 梯度爆炸
    • 11. 神经网络权重初始化
    • 12. 梯度的数值逼近
    • 13. 梯度检验
    • 14. 梯度检验的注意事项
    • 作业

参考:
吴恩达视频课
深度学习笔记

1. 训练,验证,测试集

深度学习是一个典型的迭代过程,迭代的效率很关键

创建高质量的训练数据集验证集测试集有助于提高循环效率

  • 切分标准:
    小数据量时代,常见做法是三七分,70%验证集,30%测试集;也可以 60%训练,20%验证和20%测试集来划分。
    大数据时代,数据量可能是百万级别,验证集和测试集占总量的比例会趋于变得更小。
    我们的目的就是验证不同的算法,检验哪种算法更有效,不需要拿出20%的数据作为验证集,很少的一部分占比的数据就已经足够多了。
  • 数据来源:
    最好要确保 验证集 和 测试集 的数据来自同一分布,因为要用验证集来评估不同的模型,如果验证集和测试集来自同一个分布就会很好

2. 偏差,方差

在这里插入图片描述
关键数据:
训练集误差、验证集误差

在这里插入图片描述
如果最优误差(贝叶斯误差,人分辨的最优误差)非常高,比如15%。那么上面第二种分类器(训练误差15%,验证误差16%),15%的错误率对训练集来说也是非常合理的,偏差不高,方差也非常低。
(以上基于假设:基本误差很小,训练集和验证集 来自相同分布

根据这两个指标,更好的优化算法。

3. 机器学习基础

在这里插入图片描述

4. 正则化

正则化有助于防止过拟合,降低方差

范数(norm) 几种范数的简单介绍

  • L1 范数:∣∣X∣∣1=∑i=1n∣xi∣||X||_1 = \sum\limits_{i=1}^n |x_i|X1=i=1nxi 表示非零元素的绝对值之和
  • L2 范数:∣∣X∣∣2=∑i=1nxi2||X||_2 = \sqrt{\sum\limits_{i=1}^n {x_i}^2}X2=i=1nxi2 表示元素的平方和再开方
    矩阵的范数叫做:弗罗贝尼乌斯范数,所有元素的平方和 ∣∣W∣∣F2||W||_F^{2}WF2

加上 L2 正则化 的损失函数:
J(ω,b)=1m∑i=1mL(y^(i),y(i))+λ2m∥ω∥22J(\omega, b)=\frac{1}{m} \sum_{i=1}^{m} \mathcal L \left(\hat{y}^{(i)}, y^{(i)}\right)+\frac{\lambda}{2 m}\|\omega\|_{2}^{2}J(ω,b)=m1i=1mL(y^(i),y(i))+2mλω22

  • L1 正则,权重 w 最终变得稀疏,多数变成 0
  • L2 正则,使得权重衰减

W[l]=(1−αλm)∗W[l]−α(梯度)W^{[l]} = (1-\frac{\alpha\lambda}{m})*W^{[l]} - \alpha(梯度)W[l]=(1mαλ)W[l]α()
权重不但减少了,还乘以了小于1的系数进行衰减

5. 为什么正则化预防过拟合

J(ω,b)=1m∑i=1mL(y^(i),y(i))+λ2m∥ω∥22J(\omega, b)=\frac{1}{m} \sum_{i=1}^{m} \mathcal L \left(\hat{y}^{(i)}, y^{(i)}\right)+\frac{\lambda}{2 m}\|\omega\|_{2}^{2}J(ω,b)=m1i=1mL(y^(i),y(i))+2mλω22

λ\lambdaλ 设置的很大的时候,最终 WWW 会变得很接近于 0,神经网络中的很多单元的作用变得很小,整个网络越来越接近逻辑回归

在这里插入图片描述
在这里插入图片描述
λ\lambdaλ 增大时,整个神经网络会计算离线性函数近的值,这个线性函数非常简单,不是复杂的高度非线性函数,不会发生过拟合

L2 正则化是 训练深度学习模型时最常用的一种方法

6. dropout(随机失活)正则化

在这里插入图片描述
以上是一个样本的过程,其他样本也是同样的过程。

实施 dropout 举例:最常用的方法 - inverted dropout(反向随机失活)

用一个三层网络举例

  • 定义向量 dddd[3]d^{[3]}d[3] 表示一个三层的 dropout 向量 d3 = np.random.rand(a3.shape[0],a3.shape[1]),对于元素小于 keep-prob 的,对应为 0,其概率为 1 - keep_prob
  • 获取激活函数 a[3]a^{[3]}a[3], a3 = np.multiply(a3, d3),使得 d[3]d^{[3]}d[3] 中为 0 的元素把 a[3]a^{[3]}a[3] 对应元素归零
  • 向外扩展 a[3]a^{[3]}a[3]a3 /= keep_prob

反向随机失活(inverted dropout)方法通过除以keep-prob,确保 a[3]a^{[3]}a[3] 的期望值不变

7. 理解 dropout

  • 其功能类似于 L2 正则化
  • 对于参数集多的层,可以使用较低的 keep-prob 值(不同的层,可以使用不同的值),缺点是:需要交叉验证更多的参数

dropout 一大缺点就是:代价函数不再被明确定义,每次迭代,都会随机移除一些节点,想检查梯度下降的性能,实际上是很难进行复查的

  • 可以先关闭dropout,将keep-prob 设置为 1,确保 J 函数单调递减
  • 然后再尝试打开dropout

8. 其他正则化

  • 数据扩增,假如是图片数据,扩增数据代价高,我们可以:

水平翻转;随意剪裁旋转放大(这种方式扩增数据,进而正则化数据集,减少过拟合成本很低)
在这里插入图片描述

对于数字识别图片,我们可以进行旋转,扭曲来扩增数据集
在这里插入图片描述

  • early stopping
    在这里插入图片描述
    在验证集误差变坏的时候,提早停止训练

early stopping 缺点:不能同时处理 过拟合 和 代价函数不够小的问题

  • 提早停止,可能代价函数 J 不够小
  • 不提早结束,可能会过拟合

不使用 early stopping ,那么使用 L2 正则,这样训练时间可能很长,参数搜索空间大,计算代价很高

early stopping 优点:只运行一次梯度下降,可以找出 w 的较小值,中间值,较大值,无需尝试 L2 正则化超参数 λ\lambdaλ 的很多值

9. 归一化输入

归一化输入,可以加速训练

  • 零均值(所有的数据减去均值)
  • 归一化方差(所有数据除以方差)

注意:μ,σ2\mu, \sigma^2μ,σ2 是由训练集得到,然后用于其他所有数据集
在这里插入图片描述

10. 梯度消失 / 梯度爆炸

在这里插入图片描述
在非常深的神经网络中,权重只要不等于 1,激活函数将会呈指数级递增或者递减,导致训练难度上升,尤其是梯度与 L 相差指数级,梯度下降算法的步长会非常非常小,学习时间很长。

11. 神经网络权重初始化

上面讲到了梯度消失/爆炸,如何缓解这个问题?

在这里插入图片描述
为了预防 z 的值 过大 或 过小,n 越大时,你希望 wi 越小,合理的方法是 wi=1/nw_i = 1/nwi=1/n,n 是输入特征数量

w[l]=np.random.randn(shape)∗np.sqrt(1n[l−1])w^{[l]} = np.random.randn(shape)*np.sqrt(\frac{1}{n^{[l-1]}})w[l]=np.random.randn(shape)np.sqrt(n[l1]1)n[l−1]n^{[l-1]}n[l1] 是给第 lll 层输入的特征数量

  • 如果使用ReLu激活函数(最常用),∗np.sqrt(2n[l−1])*np.sqrt(\frac{2}{n^{[l-1]}})np.sqrt(n[l1]2)
  • 如果使用tanh激活函数,1n[l−1]\sqrt \frac{1}{n^{[l-1]}}n[l1]1,或者 2n[l−1]+n[l]\sqrt \frac{2}{n^{[l-1]}+n^{[l]}}n[l1]+n[l]2

这样设置的权重矩阵既不会增长过快,也不会太快下降到 0
从而训练出一个权重或梯度不会增长或消失过快的深度网络
我们在训练深度网络时,这也是一个加快训练速度的技巧

12. 梯度的数值逼近

在反向传播时,有个测试叫做梯度检验

我们使用双边误差,
f′(θ)=f(θ+ε)−f(θ−ε)2ε\left.f^{\prime}( \theta\right)=\frac{f(\theta+\varepsilon)-f(\theta-\varepsilon)}{2 \varepsilon}f(θ)=2εf(θ+ε)f(θε)
不使用单边误差,因为前者更准确。

13. 梯度检验

梯度检验帮助我们发现反向传播中的 bug

在这里插入图片描述

dθapprox [i]=J(θ1,θ2,…θi+ε,…)−J(θ1,θ2,…θi−ε,…)2εd \theta_{\text {approx }}[i]=\frac{J\left(\theta_{1}, \theta_{2}, \ldots \theta_{i}+\varepsilon, \ldots\right)-J\left(\theta_{1}, \theta_{2}, \ldots \theta_{i}-\varepsilon, \ldots\right)}{2 \varepsilon}dθapprox [i]=2εJ(θ1,θ2,θi+ε,)J(θ1,θ2,θiε,)

dθ[i]=∂J∂θid \theta[i]=\frac{\partial J}{\partial \theta_{i}}dθ[i]=θiJ

检验 dθapprox [i]≈dθ[i]d \theta_{\text {approx }}[i] \approx d \theta[i]dθapprox [i]dθ[i]

∥dθapprox −dθ∥2∥dθapprox ∥2+∣∣dθ∣∣2\frac{\left\|d \theta_{\text {approx }}-d \theta\right\|_{2}}{ \left\|d \theta_{\text {approx }}\right\|_{2}+||d \theta||_2}dθapprox 2+dθ2dθapprox dθ2
检查上式的值是否 <10−7< 10^{-7}<107

14. 梯度检验的注意事项

  1. 不要在训练中使用梯度检验,它只用于调试
  2. 如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出bug
  3. 如果使用了正则化,计算梯度的时候也要包括正则项
  4. 梯度检验不能dropout同时使用,可以关闭dropout,进行梯度检验,检验正确了,再打开dropout

作业

02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面(作业:初始化+正则化+梯度检验)


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言第十讲 逻辑斯蒂回归

模型函数介绍 Logistic Regression 虽然被称为回归&#xff0c;但其实际上是分类模型&#xff0c;并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。 Logistic 回归的本质是&#xff1a;假设数据服从这个Logistic 分布&#xff0c;然后使用极…

阿里云 超级码力在线编程大赛初赛 第3场 题目4. 完美字符串

文章目录1. 题目2. 解题1. 题目 描述 定义若一个字符串的每个字符均为’1’&#xff0c;则该字符串称为完美字符串。 给定一个只由’0’和’1’组成的字符串s和一个整数k。 你可以对字符串进行任意次以下操作 选择字符串的一个区间长度不超过k的区间[l, r]&#xff0c;将区间…

R语言第十一讲 决策树与随机森林

概念 决策树主要有树的回归和分类方法&#xff0c;这些方法主要根据分层和分割 的方式将预测变量空间划分为一系列简单区域。对某个给定待预测的观 测值&#xff0c;用它所属区域中训练集的平均值或众数对其进行预测。 基于树的方法简便且易于解释。但预测准确性通常较低。如图…

python面试题汇总(1)

1. (1)python下多线程的限制以及多进程中传递参数的方式   python多线程有个全局解释器锁&#xff08;global interpreter lock&#xff09;&#xff0c;这个锁的意思是任一时间只能有一个线程使用解释器&#xff0c;跟单cpu跑多个程序一个意思&#xff0c;大家都是轮着用的&…

阿里云 超级码力在线编程大赛初赛 第3场 题目1. 最大公倍数

文章目录1. 题目2. 解题1. 题目 来源&#xff1a;https://tianchi.aliyun.com/oj/15179470890799741/85251759933690467 2. 解题 看的大佬的解题&#xff0c;很强&#xff01; class Solution { public:/*** param a: Left margin* param b: Right margin* return: return t…

Javascript:前端利器 之 JSDuck

背景 文档的重要性不言而喻&#xff0c;对于像Javascript这种的动态语言来说就更重要了&#xff0c;目前流行的JDoc工具挺多的&#xff0c;最好的当属JSDuck&#xff0c;可是JSDuck在Windows下的安装非常麻烦&#xff0c;这里就写下来做个备忘。 JSDuck生成的文档效果 JSDuck安…

Ubuntu 扩展内存或断电之后卡在 /dev/sda1 clean 和 /dev/sda1 recovering journal

当ubuntu虚拟机硬盘空间不够用的时候&#xff0c;往往会出现新增扩展硬盘空间之后&#xff0c;出现开机卡死的现象。 通过查阅相关资料&#xff0c;排坑如下&#xff1a; 一、原VM硬盘空间已满 当原VM硬盘空间已满的情况下&#xff0c;千万不要重启或者关机操作&#xff0c;极…

阿里云 超级码力在线编程大赛初赛 第3场 题目2. 房屋染色(DP)

文章目录1. 题目2. 解题1. 题目 有n个房子在一列直线上&#xff0c;现在Bob需要给房屋染色&#xff0c;共有k种颜色。 每个房屋染不同的颜色费用也不同&#xff0c;Bob希望有一种染色方案使得相邻的房屋颜色不同。 但Bob计算了使相邻房屋颜色不同的最小染色费用&#xff0c;发…

TCP协议以及三次握手

TCP协议&#xff0c;传输控制协议&#xff08;英语&#xff1a;TransmissionControl Protocol&#xff0c;缩写为 TCP&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC793定义。 tcp通信需要经过创建连接、数据传送、终止连接三个步骤…

02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面(作业:初始化+正则化+梯度检验)

文章目录作业1&#xff1a;初始化1. 神经网络模型2. 使用 0 初始化3. 随机初始化4. He 初始化作业2&#xff1a;正则化1. 无正则化模型2. L2 正则化3. DropOut 正则化3.1 带dropout的前向传播3.2 带dropout的后向传播3.3 运行模型作业3&#xff1a;梯度检验1. 1维梯度检验2. 多…

LeetCode 第 34 场双周赛(385/2842,前13.5%)

文章目录1. 比赛结果2. 题目1. LeetCode 5491. 矩阵对角线元素的和 easy2. LeetCode 5492. 分割字符串的方案数 medium3. LeetCode 5493. 删除最短的子数组使剩余数组有序 medium4. LeetCode 5494. 统计所有可行路径 hard1. 比赛结果 做出来3题&#xff0c;最后一题动态规划&a…

TCP程序流程及服务器客户端

Tcp服务器创建&#xff1a; import socket # 服务器的端口号 PORT 9000 # 创建套接字socket对象&#xff0c;用于进行通讯 # scoket.SOCK_STREAM 表明使用tcp协议&#xff0c;流式协议 # 监听socket server_sock socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 为…

LeetCode 1576. 替换所有的问号

文章目录1. 题目2. 解题1. 题目 给你一个仅包含小写英文字母和 ? 字符的字符串 s&#xff0c; 请你将所有的 ? 转换为若干小写字母&#xff0c;使最终的字符串不包含任何 连续重复 的字符。 注意&#xff1a;你 不能 修改非 ‘?’ 字符。 题目测试用例保证 除 ‘?’ 字符…

tcp十种状态

CLOSED&#xff1a;表示关闭状态&#xff08;初始状态&#xff09;。 LISTEN&#xff1a;该状态表示服务器端的某个SOCKET处于监听状态&#xff0c;可以接受连接。 SYN_SENT&#xff1a;这个状态与SYN_RCVD遥相呼应&#xff0c;当客户端SOCKET执行CONNECT连接时&#xff0c;它首…

TCP的2MSL问题

2MSL (Maximum SegmentLifetime) TIME_WAIT状态的存在有两个理由&#xff1a; 让4次挥手关闭流程更加可靠&#xff1b;4次挥手的最后一个ACK是是由主动关闭方发送出去的&#xff0c;若这个ACK丢失&#xff0c;被动关闭方会再次发一个FIN过来。若主动关闭方能够保持一个2MSL的TI…

LeetCode 1577. 数的平方等于两数乘积的方法数(双指针)

文章目录1. 题目2. 解题1. 题目 给你两个整数数组 nums1 和 nums2 &#xff0c;请你返回根据以下规则形成的三元组的数目&#xff08;类型 1 和类型 2 &#xff09;&#xff1a; 类型 1&#xff1a;三元组 (i, j, k) &#xff0c;如果 nums1[i]2 nums2[j] * nums2[k] 其中 0…

LeetCode 1578. 避免重复字母的最小删除成本

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 和一个整数数组 cost &#xff0c;其中 cost[i] 是从 s 中删除字符 i 的代价。 返回使字符串任意相邻两个字母不相同的最小删除成本。 请注意&#xff0c;删除一个字符后&#xff0c;删除其他字符的成本不会改变。 示例 1&…

hdu2709 Sumsets 递推

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2709 感觉很经典的一道递推题 自己想了有半天的时间了。。。。比较弱。。。。 思路&#xff1a; 设f[n]表示和为n的组合数&#xff1b; 那么 当n为奇数时&#xff0c;很简单&#xff0c;相当于在f[n-1]的每一个…

python入门字符串

python 字符串str&#xff0c; ‘’, ‘’ ‘’, ‘’’ ‘’’;python没有字符&#xff0c;只有字符串hh 切片 字符串不可以修改&#xff0c;修改的话&#xff0c;类似于tuple, 修改的话&#xff0c; 只可以整体修改 tuple 也是可这样&#xff0c; 确切的说只是修改了指针…