笔试

机器学习基础与优化技巧

一、交叉熵损失函数

首先sigmoid函数 y^=g(z)=11+ezy^=g(z)=11+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^)1yPtrue=y^y∗(1−y^)1−y

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

J=log(y^y(1y^)1y)=(ylogy^+(1y)log(1y^))J=−log(y^y∗(1−y^)1−y)=−(y⋅logy^+(1−y)⋅log(1−y^))

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

Jz=[y(ez1+ez)+(1y)(1+ez1+ez)]=[y+ez1+ez1]=ez1+ezy=g(z)y∂J∂z=−[y(e−z1+e−z)+(1−y)(−1+e−z1+e−z)]=−[y+e−z1+e−z−1]=e−z1+e−z−y=g(z)−y

二、BP算法的推导

交叉熵损失函数的导数如上所示: dz=g(z)y=aydz=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−z1+e−z−y)(e−z(1+e−z)2)=2((e−z−y−ye−z)(e−z)(1+e−z)3)

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

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

dZ[2]=A[2]YdW[2]=1mdZ[2]A[1]Tdb[2]=avg(dZ[2])dZ[2]=A[2]−YdW[2]=1mdZ[2]A[1]Tdb[2]=avg(dZ[2])

注意到 dA[1]=W[2]TdZ[2]dA[1]=W[2]TdZ[2], 所以:

dZ[1]=W[2]TdZ[2]g[1]Z[1]dW[1]=dZ[1]XTdb=avg(dZ[1])dZ[1]=W[2]TdZ[2]∗∂g[1]∂Z[1]dW[1]=dZ[1]XTdb=avg(dZ[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||2J(wl,bl)=1m∑i=1mJ(y′,y)+λ2m∑l=1L||wl||2

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

dW=dW+λmWW=Wα(dW+λmW)=(1αλm)WαdWdW=dW原+λmWW=W−α∗(dW原+λmW)=(1−αλm)W−α∗dW原

作用:
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μ)2Znorm=Z−μσ2+ϵ其中μ=1m∑Zi;σ2=1m∑(Zi−μ)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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值