【收藏】十个深度学习和机器学习问题速问速答


前言:若需获取本文全部的手书版原稿资料,扫码关注公众号,回复: 深度学习问答 即可获取。

原创不易,转载请告知并注明出处!扫码关注公众号【机器学习与自然语言处理】,定期发布知识图谱,自然语言处理、机器学习等知识,添加微信号【17865190919】进讨论群,加好友时备注来自CSDN。
在这里插入图片描述

一、谈如何划分训练集、验证集和测试集

高质量验证集、测试集、训练集对于神经网络至关重要,验证集目的:在多个算法中选出最有效的算法,测试集目的:正确评估分类器的性能

那如何划分训练集、验证集、测试集,在小数据量时,例如1000,10000时划分标准可参考(70%,30%)(无验证集)、(60%,20%,20%),当百万数据及以上时,如100万,我们可能只需要10000个作为验证集,10000作为测试集,划分比例(98%,1%,1%),当数据量很大时,有时候训练集可高大99.5%

常见问题:训练数据和验证,测试数据分布不匹配的问题,例如:训练集是非常高清标准的图片,测试集是用户随意拍照上传的不清楚模糊的图片
建议:保证验证集和测试集是来自同一个分布,有的时候验证集和测试集被看成同一概念

二、谈梯度消失和梯度爆炸原因及解决方法

首先清楚深度学习中使用梯度更新参数,梯度消失和梯度爆炸自然和梯度有密切联系
梯度消失原因:1、网络层数太深,2、采用了不合适的激活函数
梯度爆炸原因:1、网络层数太深,2、权重初始化值太大
激活函数选择的好会降低梯度消失和梯度爆炸的可能,但并不是说线性的激活函数就不会出现梯度消失和梯度爆炸
梯度消失和梯度爆炸解决办法
1、预训练+微调:逐层预训练,对整个网络进行微调
2、梯度剪切和正则,梯度剪切是针对梯度爆炸的,正则化通过对网络权重正则防止过拟合
3、relu、leakrelu、elu等激活函数使用,线性激活函数不会出现梯度消失,梯度爆炸
4、Batch Normalization:规范化操作将输出规范化保证网络稳定性
5、残差结构:残差网络可以跨层直接连接,很多层也不用担心梯度消失、梯度爆炸
6、LSTM:长短期记忆网络通过复杂的门结构,输入门、输出门、遗忘门使得可以选择性记住或遗忘网络中的信息

三、谈为什么正则化可以防止过拟合

1、正则化降低了参数w的值,参数w值降低便降低了许多隐藏神经元权重,降低了隐藏神经元的影响,这样模型复杂度降低了,不会把数据误差特征学习到,防止过拟合

2、正则化使得参数变小,导致激活函数传入的z=wa+b变小,如果是tanh函数,便使得激活函数tanh(z)在0附近趋向于是线性函数,既是对于多层神经网络,如果激活函数是线性函数则也将大大降低过拟合的风险

四、谈dropout函数的原理和实现方式

在神经网络中使用Dropout会使得网络变小,和使用正则化有类似的效果,因此有防止过拟合效果,Dropout和L2正则化效果相似,dropout函数的工作流程:

1、遍历神经网络的每一层节点,设置节点保留概率keep_prob,keep_prob表示保留一个神经元的概率
2、删除神经网络的节点,并删除网络与移除节点之间的连接
3、输入样本,使用简化后的网络进行训练,每次输入样本的时候都要重复这三步

Dropout中节点失活算法:反向随机失活,以下图神经网络的第三层使用反向随机失活过程:
在这里插入图片描述

1、第三层网络的权重参数用a3表示,使用a3的shape来产生一个0到1的随机矩阵
2、设置keep_prob(0到1)的大小,keep_prob表示该层节点保留的概率。对于第一步产生的随机矩阵与keep_prob进行比较,小于为1,大于为0。1表示保留该节点,0表示删除矩阵
3、将a3与0和1的矩阵相乘(这里是普通的乘法,不是矩阵相乘),的到新权重参数矩阵a3
4、对输出的a3矩阵除以keep_prob,即a3 =keep_prob,这一步是最关键的。将a3除以keep_prob的目的是保证a3的期望值(均值)不变,从而保证第三层的输出不变。

注意:dropout在测试阶段不需要使用,因为如果在测试阶段使用dropout可能会导致预测值产生随机变化(因为dropout使节点随机失活)。而且,在训练阶段已经将权重参数除以keep_prob来保证输出的期望值不变,所以在测试阶段没必要再使用dropout。

五、谈如何归一化样本输入基归一化好处

对于输入数据,数据特征可能在在不同的范围内,因此需要归一化输入,归一化输入可以加快神经网络的训练速度

1、归一化均值
2、归一化方差

实际应用中需要同时对:训练数据、测试数据做归一化处理,看下图1是原始数据点,下图二是做了归一化均值之后的数据点,下图二是做了归一化方差后的数据点
在这里插入图片描述

为什么需要对数据特征做归一化处理,从损失函数J的角度来看,特征归一化之后无论初始点在哪里都能很快梯度下降到最值点,如下图来看,左边两幅图是未作归一化处理数据的损失函数图像,右边两幅是做了归一化处理数据的损失函数图像,损失函数用的既是均方误差损失函数
在这里插入图片描述

六、谈反向梯度传播中如何进行梯度校验

反向传播算法很难调试得到正确结果,尤其是当实现程序存在很多难于发现的bug时。举例来说,索引的缺位错误(off-by-oneerror)会导致只有部分层的权重得到训练,忘记计算偏置项。这些错误会使你得到一个看似十分合理的结果,但实际偏差很差,因此梯度校验显得至关重要。梯度校验方式如下:

1、利用双边误差计算梯度近似值gradapprox,计算公式如下:

f ( θ + ε ) − f ( θ − ε ) 2 ε   ≈   ∇ f ( θ ) \frac{f\left( \theta + \varepsilon \right) - f(\theta - \varepsilon)}{2\varepsilon}\ \approx \ \nabla f(\theta) 2εf(θ+ε)f(θε)  f(θ)

2、网络中反向传播得到梯度值grad

3、按照如下公式进行计算,当difference足够小,如 10-7,认为很好,校验通过

d i f f e r e n c e =   ∣ ∣ g r a d − g r a d a p p r o x ∣ ∣ 2 ∣ ∣ g r a d ∣ ∣ 2 +   ∣ ∣ g r a d a p p r o x ∣ ∣ 2 difference = \ \frac{{||grad - gradapprox||}_{2}}{{||grad||}_{2} + \ {||gradapprox||}_{2}} difference= grad2+ gradapprox2gradgradapprox2

七、谈神经网络中常用的损失函数

1、均方误差损失函数

MSE ( y , y ) =   ∑ i = 1 n ( y − y − ) 2 n \text{MSE}\left( y_{,}y \right) = \ \frac{\sum_{i = 1}^{n}{(y - y_{-})}^{2}}{n} MSE(y,y)= ni=1n(yy)2

2、交叉熵损失函数,表征两个概率分布之间的距离

H ( y − ,   y ) =   − ∑ y − ∗ l o g y H\left( y_{-},\ y \right) = \ - \sum_{}^{}{y_{-}*logy} H(y, y)= ylogy

3、Softmax损失函数,当n分类的n个输出(y1,y2,…,yn)通过softmax函数,便满足了概率分布的要求:

∀ x      P ( X = x ) ϵ [ 0 , 1 ]   and  ∑ x P ( X = x ) = 1 \forall x\ \ \ \ P\left( X = x \right)\epsilon\left\lbrack 0,1 \right\rbrack\text{\ \ and\ }\sum_{x}^{}{P\left( X = x \right) = 1} x    P(X=x)ϵ[0,1]  and xP(X=x)=1

softmax ( y i ) =   e y i ∑ j = 1 n e y i \text{softmax}\left( y_{i} \right) = \ \frac{e^{y_{i}}}{\sum_{j = 1}^{n}e^{y_{i}}} softmax(yi)= j=1neyieyi

4、CTC损失函数(connectionist temporal classification)

CTC在神经网络中计算一种损失值,主要是用于可以对没有对齐的数据进行自动对齐,即主要是用在没有事先对齐的序列化数据训练上,应用领域如:语音识别、ocr识别,CTC损失函数定义为:

L ( S ) =   − ∑ ( x , z ) ϵ S l n p ( z ∣ x ) L\left( S \right) = \ - \sum_{(x,z)\epsilon S}^{}{lnp(z|x)} L(S)= (x,z)ϵSlnp(zx)

训练集S={(x1,z1),(x2,z2),…,},对于其中每一个样本(x,z)其中x=(x1,x2,…,xT)表示一个长度为时间T的向量,z=(z1,z2,…,zu)如果在语音识别中表示语音对应的音素信息,如果在OCR识别中可以看成是文本对应的一连串的单个字符信息 ykt 表示t时刻对应的音素为k的概率, P(z|x)输入为x,输出序列为z的概率

P ( z | x ) =   ∏ t = 1 T y k t P\left( z \middle| x \right) = \ \prod_{t = 1}^{T}y_{k}^{t} P(zx)= t=1Tykt

CTC优化过程计算量大,因此采用的是HMM中的向前向后算法进行计算

5、自定义损失函数,背景:如果预测商品销量,预测多了则损失成本,如果预测少了则损失利润

f ( y , y ) =   { P r o f i t ∗ ( y − − y )        y < y − Cost ( y − y − )                y ≥ y −   f\left( y_{,}y \right) = \ \left\{ \begin{matrix} Profit*\left( y_{-} - y \right)\ \ \ \ \ \ y < y_{-} \\ \text{Cost}\left( y - y_{-} \right)\ \ \ \ \ \ \ \ \ \ \ \ \ \ y \geq y_{-} \\ \end{matrix} \right.\ f(y,y)= {Profit(yy)      y<yCost(yy)              yy 

八、谈static_rnn、dynamic_rnn以及bidirectional_dynamic_rnn的区别

下面首先给出函数定义:
1、tf.contrib.rnn.static_rnn 单层rnn

tf.nn.static_rnn(
	cell, 
	input, 
	initial_state=None, 
	dtype=None, 
	sequence_length=None, 
	scope=None
)

参数解释:
cell:用于神经网络的RNN神经元,如BasicRNNCell,BasicLSTMCell
inputs:一个长度为T的list,list中的每个元素为一个Tensor
initial_state:RNN的初始状态
dtype:初始状态和预期输出的数据类型,可选参数
sequence_length:指定每个输入的序列的长度,大小为batch_size的向量
scope:变量范围

返回值元组(outpuss, state)

2、tf.nn.dynamic_rnn 多层rnn

tf.nn.dynamic_rnn(
	cell,
	inputs,
	sequence_length=None,
	initial_state=None,
	dtype=None,
	parallel_iterations=None,
	swap_memory=False,
	time_major=False,
	scope=None
)

参数和返回值解释可参照bidirectional_dynamic_rnn函数

3、tensorflow.nn.bidirectional_dynamic_rnn()函数 双向RNN

def bidirectional_dynamic_rnn(
	cell_fw,
	cell_bw,
	inputs,
	sequence_length=None,
	initial_state_fw=None,
	initial_state_bw=None,
	dtype=None,
	parallel_iterations=None,
	swap_memory=False,
	time_major=False,
	scope=None
)

常用参数解释:
cell_fw:前向RNN
cell_bw:后向RNN
inputs: 输入
sequence_length=None:输入序列的实际长度(可选,默认为输入序列的最大长度)
initial_state_fw=None:前向的初始化状态(可选)
initial_state_bw=None:后向的初始化状态(可选)
dtype=None:初始化和输出的数据类型(可选)

返回值元组:(outputs, output_states)
outputs:(output_fw, output_bw),一个包含前向cell输出tensor和后向cell输出tensor组成的元组;
output_states:(output_state_fw,output_state_bw),包含了前向和后向最后的隐藏状态的组成的元组

4、三者区别

static_rnn输入数据形式为:[步长, batch, input],输出:[n_steps, batch, n_hidden]
dynamic_rnn输入数据形式为:[batch,步长,input],输出:[batch,n_steps,n_hidden]

static_rnn每次往网络中传入批量数据时都要指定seq_length,即指定序列的大小,rnn要求每一次迭代传入的batch数据是[batch_size,max_seq],每一次迭代都不改变;
dynamic_rnn实现的功能是可以让不同迭代传入的batch的数据的长度可以是不同的,但同一次迭代batch内部所有数据的长度仍然是固定的

bidirectional_dynamic_rnn双向RNN,当cell使用LSTM时,便是双向LSTM,单项rnn只考虑上文的信息对下文信息的影响,双向RNN即考虑当前信息不仅受到上文的影响,同时也考虑下文的影响,前向rnn和dynamic_rnn完全一致,后向rnn输入的序列经过了反转

九、谈变量常假设符合的离散性概率分布有哪些

1、伯努利分布,0-1分布,随机变量取值为0或1,数学公式定义:

p ( x ) =   p x ∗ ( 1 − p ) 1 − x p\left( x \right) = \ p^{x}*\left( 1 - p \right)^{1 - x} p(x)= px(1p)1x

期望:

E ( x ) = ∑ x ∗ p ( x ) = p E\left( x \right) = \sum_{}^{}{x*p\left( x \right)} = p E(x)=xp(x)=p

方差:

D ( x ) = E ( x 2 ) − E 2 ( x ) = p ( 1 − p ) D\left( x \right) = E\left( x^{2} \right) - E^{2}\left( x \right) = p(1 - p) D(x)=E(x2)E2(x)=p(1p)

2、二项分布,假设进行n次独立实验,每次实验成功概率为p,失败概率为1-p,若进行n次实验共成功k次数学公式定义:

p ( k ) = ( n k ) p k ( 1 − p ) n − k p\left( k \right) = \left( \frac{n}{k} \right)p^{k}{(1 - p)}^{n - k} p(k)=(kn)pk(1p)nk

二项分布相当于进行了n次伯努利分布,若 Xi 表示一次标准的伯努利分布,则二项分布为:

X =   ∑ 1 n X i X = \ \sum_{1}^{n}X_{i} X= 1nXi

期望:

E ( x ) =   ∑ 1 n E ( x i ) = n ∗ p E\left( x \right) = \ \sum_{1}^{n}{E(x_{i})} = n*p E(x)= 1nE(xi)=np

方差:

D ( x ) = ∑ 1 n D ( x i ) = n ∗ p ∗ ( 1 − p ) D\left( x \right) = \sum_{1}^{n}{D\left( x_{i} \right)} = n*p*(1 - p) D(x)=1nD(xi)=np(1p)

3、几何分布和负二项分布

几何分布也是由多次伯努利实验构成,随机变量X表示的是第一次成功所进行的实验的次数,若共进行k次,成功概率为p,则数学公式定义为:

p ( k ) = p ( X = k ) = p ∗ ( 1 − p ) k − 1 p\left( k \right) = p\left( X = k \right) = p*{(1 - p)}^{k - 1} p(k)=p(X=k)=p(1p)k1

负二项分布表示直到成功r次停止,当r=1时便是几何分布(公式为什么?):

P ( X = k ) = ( k − 1 r − 1 ) p r ∗ ( 1 − p ) k − r P\left( X = k \right) = \left( \frac{k - 1}{r - 1} \right)p^{r}*{(1 - p)}^{k - r} P(X=k)=(r1k1)pr(1p)kr

几何分布期望:

E ( x ) =   1 p E\left( x \right) = \ \frac{1}{p} E(x)= p1

几何分布方差:

D ( x ) =   1 − p p 2 D\left( x \right) = \ \frac{1 - p}{p^{2}} D(x)= p21p

4、超几何分布

超几何分布即从N个商品中指定M个,
不放回抽取n个,抽中指定商品数量的个数,即随机变量X~H(N,n,M),若抽中指定商品k件则表示成数学公式为:

p ( k ) = P ( X = k ) = ( M k ) ( N − M n − k ) ( N n ) p\left( k \right) = P\left( X = k \right) = \frac{\left( \frac{M}{k} \right)\left( \frac{N - M}{n - k} \right)}{\left( \frac{N}{n} \right)} p(k)=P(X=k)=(nN)(kM)(nkNM)

N个商品总共抽取n件,从指定商品M中抽取了k件,从N-M件商品中抽取了n-k件

5、泊松分布

泊松分布是二项分布的极限形式,当n趋向于无穷大时,可由二项分布推导出泊松分布,泊松分布数学公式定义为:

P ( x = k ) =   λ k e − λ k ! P\left( x = k \right) = \ \frac{\lambda^{k}e^{- \lambda}}{k!} P(x=k)= k!λkeλ

清楚如何通过二项分布推导出泊松分布,另外大概 λ = 20时泊松分布基本可以近似于正态分布函数处理

十、谈变量常假设符合的连续性概率分布有哪些

1、均匀分布

均匀分布概率密度函数,随机变量X满足:

p ( x ) =   { 1 b − a      a < x < b 0           p\left( x \right) = \ \left\{ \begin{matrix} \frac{1}{b - a}\ \ \ \ a < x < b \\ 0\ \ \ \ \ \\ \end{matrix} \right.\ \text{\ \ } p(x)= {ba1    a<x<b0        

2、指数分布

指数分布概率密度函数:

p ( x ) =   { λ e − λ x      x > 0 0                 x < = 0   p\left( x \right) = \ \left\{ \begin{matrix} \lambda e^{- \lambda x}\ \ \ \ x > 0 \\ 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ x < = 0 \\ \end{matrix} \right.\ p(x)= {λeλx    x>00               x<=0 

均值:1/λ,方差:1/λ2

3、正态分布

随机变量X为一维时,概率密度函数为:

p ( x ) =   1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) p\left( x \right) = \ \frac{1}{\sqrt{2\pi}\sigma}exp( - \frac{{(x - \mu)}^{2}}{2\sigma^{2}}) p(x)= 2π σ1exp(2σ2(xμ)2)

随机变量X多维时,则d维概率密度函数为:

p ( x ) = 1 ( 2 π ) d 2 ∣ Σ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p\left( x \right) = \frac{1}{\left( 2\pi \right)^{\frac{d}{2}}\left| \Sigma \right|^{\frac{1}{2}}}exp( - \frac{1}{2}{(x - \mu)}^{T}\Sigma^{- 1}(x - \mu)) p(x)=(2π)2dΣ211exp(21(xμ)TΣ1(xμ))

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值