笔试

一、交叉熵损失函数

首先sigmoid函数 y ^ = g ( z ) = 1 1 + e z 给出的是分类为1的概率,分类为0的概率为 1 y ^ ,即:

P ( y = 1 | x ) = y ^ P ( y = 0 | x ) = 1 y ^

利用y=0时1-y=1而y=1时1-y=0的特点得到分类正确的概率为(类似取一次球,1次该类0次其他):

P t r u e = y ^ y ( 1 y ^ ) 1 y

欲使 p t r u e 最大相当于则使其负数最小化,并取对数,即得到交叉熵损失函数(交叉的意思大概实说你1我就0):

J = l o g ( y ^ y ( 1 y ^ ) 1 y ) = ( y l o g y ^ + ( 1 y ) l o g ( 1 y ^ ) )

取对数可以让求导更加方便,例如 l o g 1 1 + e z = l o g 1 l o g ( 1 + e z ) 于是:

J z = [ y ( e z 1 + e z ) + ( 1 y ) ( 1 + e z 1 + e z ) ] = [ y + e z 1 + e z 1 ] = e z 1 + e z y = g ( z ) y

二、BP算法的推导

交叉熵损失函数的导数如上所示: d z = g ( z ) y = a y
平方差损失函数求导为:

( a y ) 2 z = 2 ( e z 1 + e z y ) ( e z ( 1 + e z ) 2 ) = 2 ( ( e z y y e z ) ( e z ) ( 1 + e z ) 3 )

容易看出平方差的导数远小于交叉熵的导数,梯度下降的速度较慢且可能导致梯度消失。

假设第二层的输出为A,根据交叉熵损失函数的导数易得:

d Z [ 2 ] = A [ 2 ] Y d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T d b [ 2 ] = a v g ( d Z [ 2 ] )

注意到 d A [ 1 ] = W [ 2 ] T d Z [ 2 ] , 所以:

d Z [ 1 ] = W [ 2 ] T d Z [ 2 ] g [ 1 ] Z [ 1 ] d W [ 1 ] = d Z [ 1 ] X T d b = a v g ( d Z [ 1 ] )

ps: 前向传播过程中W的行和同一层的Z的行相同,列和上一层的Z相同,而Z和A行列都相同,方便确定W和A的转置问题。

三、激活函数比较,正则化和过拟合问题

Relu相较于Sigmoid函数优点

1、防止梯度消失(Sigmoid在两端梯度很小,反向传播涉及连乘放大效应)
2、稀疏激活性(<=0部分失活)
3、加快计算且平稳(Relu仅仅是if-else语句)

缺点:若输出值<=0无论反向传播的梯度多大,上一层得到的梯度都为0。

L2正则化:

J w l , b l = 1 m i = 1 m J ( y , y ) + λ 2 m l = 1 L | | w l | | 2

L2正则化起作用的原因是减小了W的值防止权重过大, a为学习率:

d W = d W + λ m W W = W α ( d W + λ m W ) = ( 1 α λ m ) W α d W

作用:
1、防止过拟合
2、平衡模型的方差和偏差,拟合能力与泛化能力问题(防止参数过大避免训练集中独有的特征过多的影响模型结构)
3、特征选择和稀疏性(将一部分W减少为或接近0,使这部分特征不起作用)

L1正则化:
和L2类似,不过后面加的是

λ | | W | |
这样梯度下降减去的就是一个常数。

dropout正则化: 在前向传播过程随机使一部分神经元失活。

Batch normalization(BN): 和输入标准化处理类似,Batch normalization对 Z 进行标准化处理,ϵ 是为了防止分母为零,通常取 10−8:

Z n o r m = Z μ σ 2 + ϵ μ = 1 m Z i σ 2 = 1 m ( Z i μ ) 2

Batch normalization的作用:
1、类似标准化处理,加快训练速度
2、防止某些参数过大,减小对某些使其分散分布的神经元的依赖(正则化)
3、将Z“聚集”在更中间部分,减小前面神经元的影响,让后续神经元有更大的自由度,有利于去噪。

输入标准化/归一化: 当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。另外在数据中常存在奇异样本数据,奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛。为了避免出现这种情况及后面数据处理的方便,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。

方法:
1、线性函数转换,表达式如下:
x = (x - MinValue) / (MaxValue-MinValue)

2、对数函数转换,表达式如下:
y=log10(x) 说明:以10为底的对数函数转换。

3、反余切函数转换,表达式如下:
y=atan(x)*2/PI

四、类别不平衡的问题

解决方法:
1、上采样(oversampling):增加一些偏少的正例或者反例使得类别数目相对接近。
2、下采样(undersampling):减少一些过多的正例或者反例使得类别数目相对接近。
3、阀值移动(threshold-moving):例如将 作为新的惩罚系数。

比较好的解决方式是采用上采样,随机从全部例子中抽取一部分作为补充添加到批训练中。不浪费数据。

ps:数据分布不同时如验证集过少,训练集和验证集数据采集方式不一样等,可以适当从验证集中取一部分添加到训练集中,并主要关注验证集的表现(实际表现)。

五、决策树Decision tree

猜你喜欢

转载自blog.csdn.net/dod_jdi/article/details/81156820