【学习记录】《DeepLearning.ai》第五课 深度学习的实践层面

简介: 行内公式啥时候修复呀。。。

第五课 深度学习的实践层面

1.1 训练、验证、测试集(Train/Dev/Test sets)

总结一下,在机器学习中,我们通常将样本分成训练集(60%),验证集(20%)和测试集(20%)三部分,数据集规模相对较小,适用传统的划分比例,数据集规模较大的,验证集和测试集要小于数据总量的 20%或 10%.

若两类数据不同(例如一个是网页抓取到的数据图片,一个是现实中的测试集和验证集),但要确保验证集和测试集的数据来自同一分布。

通常没有测试集也不要紧


1.2 偏差,方差(Bias/Variance)

高偏差:欠拟合

高方差:过拟合

如下图所示,图1为高偏差,图3为高方差

image

image

解释上图:对于训练集误差和测试集误差:

高方差 高偏差 高方差&高偏差 低方差&低偏差
训练集误差 1% 15% 15% 0.5%
验证集误差 11% 16% 30% 1%

通过上图,我们可以根据训练集算法产生的误差和验证集上验证算法产生的误差来确定算法是否存在高偏差或者高方差,进而根据算法的偏差和方差情况来进行一些工作。


1.3 机器学习基础

解决高方差(过拟合)问题:

1.获得更多的训练样本

2.减少特征的数量

3.尝试增加正则化程度$\lambda$

解决高偏差(欠拟合)问题:

1.增加特征的数量

2.增加多项式特征

3.减少正则化程度$\lambda$


1.4 正则化(Regularization)

正则化通常用L1正则化和L2正则化,如下:

$$ L_1正则化:\frac{\lambda}{2m}\sum_{j=1}^{n_x}|w_j|=\frac{\lambda}{2m}||w||\\ L_2正则化:\frac{\lambda}{2m}\sum_{j=1}^{n_x}|w_j|^{2}=\frac{\lambda}{2m}||w||^{2}=\frac{\lambda}{2m}w^Tw $$

逻辑回归正则化公式如下:

$$ J(w,b)=\frac{1}{m}\sum_{i=1}^{m}L(\widehat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}||w||^{2} $$

对于神经网络的正则化公式如下:

$$ J(W^{[1]},b^{[1]},...,W^{[L]},b^{[L]})=\frac{1}{m}\sum_{i=1}^{m}L(\widehat{y}^{(i)},y^{(i)})+\frac{\lambda}{2m}\sum_{l=1}^{L}||w||^{2}_F $$

最后的范数$||w||^{2}_F$​被称为弗罗贝尼乌斯范数,用下标F标注,表示一个矩阵中所有元素的平方和。

梯度下降:

$$ W^{[l]}:=(1-\frac{\alpha\lambda}{m})W^{[l]}-\alpha(from backprop) $$

与之前的梯度相比增加了$\frac{\alpha\lambda}{m}$​项,因此L2正则化有时候被称为"权重衰减"。


1.5 为什么正则化有利于防止过拟合?

对于直观解释,

$$ W^{[l]}:=(1-\frac{\alpha\lambda}{m})W^{[l]}-\alpha(from backprop)\\ Z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]} $$

如果参数$\lambda$增大,也就是增加正则化参数,根据上面式子,$W^{[l]}$​会减少,进而$Z^{[l]}$​会减少,如下图,对于双曲激活函数来说,响应的值就会停留在线性部分,进而就很好的改善了过拟合现象。

image


1.6 dropout 正则化(随机失活)

主要思路:随机消除消除某些隐藏单元节点。

image

image

反向随机失活(Inverted dropout):

用第三层(l=3)网络进行举例:

首先定义向量$d^{[3]}$​表示一个第三层的dropout向量:

d3 = np.random.rand(a3.shape[0],a3.shape[1])

看其是否小于keep-prob,这里设其为0.8,它表示保留某个隐藏单元的概率。其作用是生成随机矩阵,随机矩阵中元素为1的概率是0.8,元素为0的概率是0.2.

因此我们可以得到第三层的激活函数为:

a3=np.multiply(a3,d3)或a3*=d3

这样就达到了随机消除隐层单元的目的。

对a3进一步计算:

a3/=keep-prob

反向随机失活(Inverted dropout)最后需要除以keep-prob,确保$a^{[3]}$期望值不变(这块有点疑问)。

在测试集上并不使用dropout。


1.7 理解dropout(Understanding Dropout)

dropout的缺点就是代价函数无法被定义,因此在使用中应先令keep-prob的值为1,运行代码确保代价函数单调递减之后在设置drop函数。

对于神经网络的每一层来说,根据每层的过拟合程度大小来选择合适的keep-prob,如果过拟合程度较大,则选择较小的keep-prob,相反则选择较大的。


1.8 其他正则化方法

1.数据扩增
如对原始图像进行旋转,放大,裁剪等操作后添加到新的数据集。

2.early stopping

同时绘制训练误差和验证集误差,验证集误差会有一个先下降在上升的过程,直接取验证集误差的最低点然后停止训练。

image

缺点:过早停止训练会停止优化代价函数$J$,使得代价函数的值可能不够小。

优点:只运行一次梯度下降就可以找出较小的$w$​值,中间值和较大值而不用再尝试正则化。


1.9 归一化输入(Normalizing inputs)

加速训练神经网络的一个方法:归一化输入

分两步完成:

第一步:去中心化

$$ \mu=\frac{1}{m}\sum_{i=1}^{m}x^{(i)}\\ x^{(i)}=x^{(i)}-\mu $$

移动训练集直到完成零均值化。

第二步:归一化方差

$$ \sigma^2=\frac{1}{m}\sum_{i=1}^{m}(x^{(i)})^2\\ x^{(i)}/=\sigma^2 $$

第二步的$x^{(i)}$是第一步计算之后的。

注:如果输入特征属于不同范围,比如一些特征值处于0-1,而另外一些特征值属于1-1000,则就非常需要归一化,而对于相似范围内的特征,归一化不是十分重要。


1.10 梯度消失/梯度爆炸

当神经网络层数较多或者选择权重可能会导致梯度消失/梯度爆炸,成指数级增加或减少。


1.11 神经网络的权重初始化

通常对于权重的设置:

对于Relu激活函数,权重初始化为:

$$ w^{[l]}=np.random.randn(shape)*np.sqrt(\frac{2}{n^{[l-1]}}) $$

其中$n^{l-1}$是喂给第l层神经单元的数量。

对于tanh函数,权重初始化为:

$$ w^{[l]}=np.random.randn(shape)*np.sqrt(\frac{1}{n^{[l-1]}}) $$

也有初始化为如下公式:

$$ w^{[l]}=np.random.randn(shape)*np.sqrt(\frac{2}{n^{[l-1]}+n^{[l]}}) $$


1.12 梯度的数值逼近(Numerical approximation of gradients)

双边误差的结果更准确,可以使用双边误差来判断别人给你的函数$g(\theta)$是否正确实现了对函数$f$​的偏导数。可以使用这个方法来检验反向传播是否可以正确实施。


1.13 梯度检验(Gradient checking)

个人理解大概过程:通过双边误差法计算出来$dW$和$db$与梯度下降计算出来的$dW$和$db$​做比较,如果两者相差在$10^{-7}$,则说明梯度下降是正确的。若发现两者相差较大的值,则说明程序存在bug


1.14 梯度检验应用的注意事项(Gradient Checking Implementation Notes)

1.不要在训练过程中使用梯度检验,它用于调试;

2.算法的梯度检验证明如果失败,检查每一项找出bug;

3.实时梯度检验时候需要使用正则化;

4.梯度检验不能与dropout同时使用;

5.在随机初始化过程中,运行梯度下降,再训练网络。如果随机初始化值比较小,反复训练网络之后,再重新运行梯度检验。


本周结束,明天继续fire!!!

相关文章
|
14天前
|
机器学习/深度学习 人工智能 安全
探索AI的未来:从机器学习到深度学习
【10月更文挑战第28天】本文将带你走进AI的世界,从机器学习的基本概念到深度学习的复杂应用,我们将一起探索AI的未来。你将了解到AI如何改变我们的生活,以及它在未来可能带来的影响。无论你是AI专家还是初学者,这篇文章都将为你提供新的视角和思考。让我们一起探索AI的奥秘,看看它将如何塑造我们的未来。
51 3
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
16天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
73 9
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
4天前
|
机器学习/深度学习 数据采集 自然语言处理
深入浅出深度学习:从理论到实践
【10月更文挑战第38天】本文旨在通过浅显易懂的语言和直观的代码示例,带领读者探索深度学习的奥秘。我们将从深度学习的基本概念出发,逐步深入到模型构建、训练以及应用实例,让初学者也能轻松入门。文章不仅介绍了深度学习的原理,还提供了实战操作指南,帮助读者在实践中加深理解。无论你是编程新手还是有一定基础的学习者,都能在这篇文章中找到有价值的内容。让我们一起开启深度学习之旅吧!
|
6天前
|
机器学习/深度学习 自然语言处理 语音技术
深度学习的奇妙之旅:从理论到实践
【10月更文挑战第36天】在本文中,我们将一起探索深度学习的神秘世界。我们将首先了解深度学习的基本概念和原理,然后通过一个简单的Python代码示例,学习如何使用深度学习库Keras进行图像分类。无论你是深度学习的初学者,还是有一定基础的学习者,都可以从这篇文章中获得新的知识和启示。
|
11天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
32 7
|
10天前
|
人工智能 自然语言处理 搜索推荐
AI辅助教育:个性化学习的新纪元
【10月更文挑战第31天】随着人工智能(AI)技术的发展,教育领域迎来了一场前所未有的变革。AI辅助教育通过智能推荐、语音助手、评估系统和虚拟助教等应用,实现了个性化学习,提升了教学效率。本文探讨了AI如何重塑教育模式,以及个性化学习在新时代教育中的重要性。
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI驱动的个性化学习平台构建###
【10月更文挑战第29天】 本文将深入探讨如何利用人工智能技术,特别是机器学习与大数据分析,构建一个能够提供高度个性化学习体验的在线平台。我们将分析当前在线教育的挑战,提出通过智能算法实现内容定制、学习路径优化及实时反馈机制的技术方案,以期为不同背景和需求的学习者创造更加高效、互动的学习环境。 ###
34 3
|
15天前
|
机器学习/深度学习 人工智能 算法
AI在医疗:深度学习在医学影像诊断中的最新进展
【10月更文挑战第27天】本文探讨了深度学习技术在医学影像诊断中的最新进展,特别是在卷积神经网络(CNN)的应用。文章介绍了深度学习在识别肿瘤、病变等方面的优势,并提供了一个简单的Python代码示例,展示如何准备医学影像数据集。同时强调了数据隐私和伦理的重要性,展望了AI在医疗领域的未来前景。
38 2

热门文章

最新文章