面试整理--神经网络篇

线性模型和神经网络的最大区别,在于神经网络的非线性导致大多数我们感兴趣的代价函数都变得非凸。因此对于前馈神经网络,将所有权重值初始化为小随机数是重要的。
训练一个前馈网络至少需要做和线性模型一样的多的设计决策:选择一个优化模型、代价函数以及输出单元的形式。

模型

神经网络不把线性模型作用与x本身,而是作用在一个变换后的输入 ϕ ( x ) 上,这里 ϕ ( x ) 是一个非线性变换。深度学习的策略是去学习 ϕ ( x )

代价函数

神经网络的训练与训练其他任何模型没有太大区别,仍基于梯度。

交叉熵损失函数

在大多数情况下,参数模型定义了一个分布 p ( y | x ; θ ) 并且简单地使用最大似然原理,这意味着我们使用训练数据和模型预测间的交叉熵作为代价函数。
代价函数是负的最大似然,与训练模型和模型分布间的交叉熵等价。这个代价函数表示为:

J ( θ ) = E X , Y p ^ d a t a log p m o d e l ( y | x )
.
选择负对数似然来导出代价函数的一个优势是,它减轻了为每个模型设计代价函数的负担,明确一个模型则自动确定了一个代价函数;另外,贯穿神经网络设计的一个主题是代价函数的梯度必须足够大和具有足够的预测性,来为学习算法提供好的指引。饱和(变得非常平)的函数破坏了这一目标,因为它们把梯度变得特别小。许多输出单元都会包含一个指示函数,这在它的变量取非常大的负值时会造成饱和,负对数似然中的对数函数消除了某些输出单元中的指数效果。

输出单元

当使用交叉熵作为代价函数的时候,代价函数的选择与输出单元 p ( y | x ) 的选择紧密相关。基于使用sigmoid输出单元和最大似然估计来保证较大的梯度。
1)高斯输出分布的线性单元,此时的最大化对数似然等价于最小化均方误差;
2)用于Bernoulli输出分布的sigmoid单元,此时可以得到很好的性质。仅在预测正确时饱和,预测错误时梯度较大;
3)用于Multinoulli输出分布的softmax单元,此时对数似然的推测与二分类相似,负对数似然总是强烈地惩罚最活跃的不正确预测。
具体来说,那些不使用对数来抵消softmax中的指数的目标函数,当指数函数的变量取非常小的负值时会造成梯度消失。

隐藏单元的选择

https://blog.csdn.net/zhouhong0284/article/details/80076528
Relu参数初始化使用正态分布给参数加上噪声来打破完全对称并且避免0梯度,而在softmax层可以将参数全部初始化为0。

解决过拟合

1.数据集增强,获取更多的数据,创建更多的数据;
2.使用合适的模型:网络结构简单化,参数惩罚(L1,L2);参数约束;增加噪声;提前终止
3.结合多种模型:dropout,bagging,boosting

正则化

神经网络中的正则化的方法很多,比较典型的代表有L2正则和dropout正则
L2正则依赖于一个假设:即简单的可解释的模型优于复杂的模型,因此,L2正则通过在原始的损失函数上加上了正则项( 1 m λ 2 W 2 ),而使得参数趋于一个较小的值,也就是加大的对参数的惩罚,这就使得整个模型较为简单,当输入变化时输出变化比较缓慢。
dropout正则:在每一次迭代训练中随机的隐藏一定概率的隐藏单元,因此每一次迭代的模型都是不同的,每一个神经元都不能多度依赖于另一个神经元,因此增强了模型的鲁棒性。
详细地:https://blog.csdn.net/zhouhong0284/article/details/79723593
1.L2正则公式?
2.为什么drop-out可以正则化?
3.dropout正则的几个注意点。
4.其他的正则化方法?

参数初始化

对w,b来说,选择一个好的初始参数有以下两个优点:
1.加快梯度下降的速度,使其快速收敛;
2.增加梯度下降到全局最优解的几率。
那么如何选择这个参数呢,首先参数不能全部初始化为0。当初始化参数均为0时,隐藏层中的各个单元呈对称性,在计算梯度下降时,各层的各个单元也呈对称性,那么多个隐藏单元都在做同样的事情,因为多个隐藏单元没有意义。因此,要对w参数做随机初始化,打破对称性;初始化参数为较大的值也不好,因为这样会使得activations接近0或者1,导致梯度消失或者梯度爆炸问题, 因此我们应该使用He initialization,用随机值乘 2 n l 1 ,在使用激活函数为Relu函数时尤其注意。另外Xavier initialization是用随机值乘 1 n l 1


为训练策略寻找一个算法,以往我们使用的都是梯度下降算法,实际上我们可以使用其优化算法对模型进行更快速的训练。

优化算法

学习速率需要训练的:
SGD(mini-batch gredient descent):两步,打乱和划分,注意选择划分的尺寸
Momentum
学习速率自学习的:
adegrad
RMSprop
Adam
详见:https://blog.csdn.net/qq_28031525/article/details/79535942
各自的公式?优缺点?


Batch Norm

1.什么是batch normalization,为什么要这样做,这样做有什么好处?
(1.加快神经网络的训练速度,具体表现为归一化后可以设置较大的学习速率,
2.每层的归一化使得各层之间的学习相互独立;
3.将参数z集中在均值附近,防止梯度消失和梯度爆炸;
4.正则化的效果,因为对每一层的参数z进行归一化的过程中会引入一些噪声,所以和Dropout算法一样,它往每个隐藏层的激活值上增加了噪音,dropout有噪音的模式,它使一个隐藏的单元以一定的概率乘以0,以一定得概率乘以1.BN算法的噪音主要体现在标准偏差的缩放和减去均值带来的额外噪音.这使得后面层的神经单元不会过分依赖任何一个隐藏单元.有轻微的正则化作用.如果你想获得更好的正则化效果,可以在使用Batch-Normalization的同时使用Dropout算法.)
2.在什么位置batch normalization?
3. 训练时怎么做batch normalization?测试集中怎么做?
也可以参考一下这篇文章:https://blog.csdn.net/hjimce/article/details/50866313


CNN

CNN公式推导:https://blog.csdn.net/lu597203933/article/details/46575871

  1. 为什么CNN中倾向于使用小而深的卷积核?
    把三个3*3的卷积核堆积起来,第三层中的一个pixel,可以“看到”原图的pixel个数,和一个7*7卷积核一样。但是计算复杂度,1个7*7卷积核的复杂度是49M(M是一个常数),三个3*3的复杂度是27M。
    因此相对于大的卷积核,小而多的卷积核只需使用更少的参数就能保证连通性,且降低了参数及计算复杂度

RNN

LSTM:http://colah.github.io/posts/2015-08-Understanding-LSTMs/
RNN的使用场景:语音识别,图像标注,翻译。。。

  1. 为什么LSTM渐渐取代RNN?
    因为RNN只能建立比较短期的信息依赖关系,如果当前信息与所依赖信息的gap较长的时候,RNN没有能力去充分学习所依赖的信息(这里可以解释为上一轮的信息都是用W连乘的,当W小于1时,信息会逐渐消失),而LSTM则没有这个问题。

其他神经网络的问题见:
https://blog.csdn.net/xwd18280820053/article/details/76026523

猜你喜欢

转载自blog.csdn.net/zhouhong0284/article/details/79836249
今日推荐