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

原创不易,转载请告知并注明出处!扫码关注公众号【机器学习与自然语言处理】,定期发布知识图谱,自然语言处理、机器学习等知识,添加微信号【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,认为很好,校验通过

difference=∣∣grad−gradapprox∣∣2∣∣grad∣∣2+∣∣gradapprox∣∣2difference = \ \frac{{||grad - gradapprox||}_{2}}{{||grad||}_{2} + \ {||gradapprox||}_{2}} difference= ∣∣grad∣∣2​+ ∣∣gradapprox∣∣2​∣∣grad−gradapprox∣∣2​​

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

1、均方误差损失函数

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

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

H(y−,y)=−∑y−∗logyH\left( y_{-},\ y \right) = \ - \sum_{}^{}{y_{-}*logy} H(y−​, y)= −∑​y−​∗logy

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

∀xP(X=x)ϵ[0,1]and ∑xP(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 x∑​P(X=x)=1

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

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

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

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

训练集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=1TyktP\left( z \middle| x \right) = \ \prod_{t = 1}^{T}y_{k}^{t} P(z∣x)= t=1∏T​ykt​

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

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

f(y,y)={Profit∗(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∗(y−​−y)      y<y−​Cost(y−y−​)              y≥y−​​

八、谈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)=px∗(1−p)1−xp\left( x \right) = \ p^{x}*\left( 1 - p \right)^{1 - x} p(x)= px∗(1−p)1−x

期望:

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

方差:

D(x)=E(x2)−E2(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(1−p)

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

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

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

X=∑1nXiX = \ \sum_{1}^{n}X_{i} X= 1∑n​Xi​

期望:

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

方差:

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

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

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

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

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

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

几何分布期望:

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

几何分布方差:

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

4、超几何分布

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

p(k)=P(X=k)=(Mk)(N−Mn−k)(Nn)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​)(n−kN−M​)​

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

5、泊松分布

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

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

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

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

1、均匀分布

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

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

2、指数分布

指数分布概率密度函数:

p(x)={λe−λxx>00x<=0p\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)=12πσexp(−(x−μ)22σ2)p\left( x \right) = \ \frac{1}{\sqrt{2\pi}\sigma}exp( - \frac{{(x - \mu)}^{2}}{2\sigma^{2}}) p(x)= 2π​σ1​exp(−2σ2(x−μ)2​)

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

p(x)=1(2π)d2∣Σ∣12exp(−12(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​∣Σ∣21​1​exp(−21​(x−μ)TΣ−1(x−μ))

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

  1. 深度学习和机器学习有什么关系?机器学习包含深度学习吗?

    没有一种技术的发展是孤立的,有人在接触人工智能AI的时候,搞不清楚深度学习和机器学习之间的关系,机器学习包含深度学习吗?深度学习是机器学习的一部分吗?本文来解答一下此问题. 深度学习和机器学习有什么关 ...

  2. 深度学习 vs 机器学习 vs 模式识别

    http://www.csdn.net/article/2015-03-24/2824301 [编者按]本文来自CMU的博士,MIT的博士后,vision.ai的联合创始人Tomasz Malisie ...

  3. 深度学习vs机器学习 | 这些本质区别你知道多少?

    作者 | Walker [磐创AI导读]:深度学习和机器学习已经变得无处不在,那它们之间到底有什么区别呢?本文我们为大家总结了深度学习VS机器学习的六大本质区别.欢迎大家点击上方蓝字关注公众号:磐创A ...

  4. 深度学习与机器学习的思考

    需要一些传统图像处理知识为佳. "end-to-end"(端到端)说的是,输入的是原始数据(始端),然后输出的直接就是最终目标(末端),中间过程不可知,因此也难以知. 就此,有人批 ...

  5. 新闻上的文本分类:机器学习大乱斗 王岳王院长 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处

    新闻上的文本分类:机器学习大乱斗 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处理过程与结果差 ...

  6. 整理:深度学习 vs 机器学习 vs 模式识别

    摘要:本文我们来关注下三个非常相关的概念(深度学习.机器学习和模式识别),以及他们与2015年最热门的科技主题(机器人和人工智能)的联系,让你更好的理解计算机视觉,同时直观认识机器学习的缓慢发展过程. ...

  7. 深度学习、机器学习与NLP的前世今生

    一.为什么做文本挖掘 二.为什么要用深度学习? 三.深度学习的具体应用        深度学习优点        深度学习缺点 随着深度学习的发展,自然语言处理领域的难题也得到了不断突破. Alpha ...

  8. 人工智能、深度学习和机器学习有哪些区别?

    很多人可能不明白『机器学习』.『AI(人工智能)』和『深度学习』之间的区别.这些都是现代数据技术应用中的重要关键字,但由于它们很相似,因此极易混淆.但是为了将 AI 引入日常工作中,正确理解这三个关键 ...

  9. 深度学习、机器学习、人工智能的区别

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 深度学习.机器学习.人工智能的区别 1.机器学习 是 人工智能 ...

  10. 什么是深度学习,深度学习和机器学习之间,主要有什么区别

    在深度学习中,计算机模型学习直接从图像.文本或声音中执行分类任务.深度学习模式可以达到新的精确度,有时甚至超过人类的表现.大多数深度学习方法使用神经网络的架构,这也是深度学习模型通常被称为深度神经网络 ...

最新文章

  1. ifdown eth0 idup eth0 ifdown --exclude=l0 -a ifup --exclude=lo -a
  2. AIProCon在线大会笔记之张钹院士:探索第三代人工智能,需要勇闯无人区的人才!
  3. VTK:PolyData之TriangleArea
  4. TCP/IP学习笔记(二)TCP三次握手
  5. 04-1.jQuery事件与补充each/data
  6. LVS_DR实现过程...
  7. 通知模式实现两个textField传值及模态视图——iOS开发
  8. matplotlib--python的数据可视化二
  9. Hadoop YARN最近几个新特性
  10. Linux内存从0到1学习笔记(7.3,用户空间虚拟内存之内存映射)
  11. ckeditor5 用法
  12. ios9企业证书提示“未受信任的企业级开发者”解决方法
  13. 基于Vue3和Nestjs的网上匿名聊天网站的实现
  14. 财务自由之路 读书笔记 第六章 债务
  15. Linux系统下,永久修改海思开发板的IP地址
  16. PHP面试题(附答案)
  17. 彻底缓存与协商缓存(浏览器缓存)
  18. 烟火里的尘埃 - 郁欢
  19. 俄语水平测试软件,俄语水平测试指导:俄语语法
  20. php swfupload handlers.js,swfupload 批量上传源码

热门文章

  1. 这家初创公司用端到端安全保护物联网设备
  2. Hibernate注解与JPA
  3. 首席架构师是怎样炼成的?今晚直播!
  4. AX2012 R3 Data upgrade checklist sync database step, failed to create a session;
  5. VC++学习(5):文本编程
  6. jupyter运行时in[*]是什么原因_变頻器的停止按钮按下时,电机反而不受控制加速运行是什么原因?...
  7. vue 点击div 获取位置_Vue中div contenteditable 的光标定位方法
  8. 英寸和厘米的交互python_Python / PyQt4:如何找到显示器的尺寸(以英寸为单位)?...
  9. python写sql语句_Python 数据分析:让你像写 Sql 语句一样,使用 Pandas 做数据分析...
  10. linux fortran 大数组,fortran动态数组大小分配问题(allocatable)? - 程序语言 - 小木虫 - 学术 科研 互动社区...