笔试

一、交叉熵损失函数

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

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

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

Ptrue=y^y(1y^)1y P t r u e = y ^ y ∗ ( 1 − y ^ ) 1 − y

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

J=log(y^y(1y^)1y)=(ylogy^+(1y)log(1y^)) J = − l o g ( y ^ y ∗ ( 1 − y ^ ) 1 − y ) = − ( y ⋅ l o g y ^ + ( 1 − y ) ⋅ l o g ( 1 − y ^ ) )

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

Jz=[y(ez1+ez)+(1y)(1+ez1+ez)]=[y+ez1+ez1]=ez1+ezy=g(z)y ∂ 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算法的推导

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

(ay)2z=2(ez1+ezy)(ez(1+ez)2)=2((ezyyez)(ez)(1+ez)3) ∂ ( 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,根据交叉熵损失函数的导数易得:

dZ[2]=A[2]YdW[2]=1mdZ[2]A[1]Tdb[2]=avg(dZ[2]) 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 ] )

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

dZ[1]=W[2]TdZ[2]g[1]Z[1]dW[1]=dZ[1]XTdb=avg(dZ[1]) 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正则化:

Jwl,bl=1mi=1mJ(y',y)+λ2ml=1L||wl||2 J ( w l , b l ) = 1 m ∑ i = 1 m J ( y ′ , y ) + λ 2 m ∑ l = 1 L | | w l | | 2

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

dW=dW+λmWW=Wα(dW+λmW)=(1αλm)WαdW 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|| λ | | W | |
这样梯度下降减去的就是一个常数。

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

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

Znorm=Zμσ2+ϵμ=1mZiσ2=1m(Ziμ)2 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

你可能感兴趣的:(机器学习)