一、交叉熵损失函数
首先sigmoid函数 y^=g(z)=11+e−z y ^ = g ( z ) = 1 1 + e − z 给出的是分类为1的概率,分类为0的概率为 1−y^ 1 − y ^ ,即:
利用y=0时1-y=1而y=1时1-y=0的特点得到分类正确的概率为(类似取一次球,1次该类0次其他):
欲使 ptrue p t r u e 最大相当于则使其负数最小化,并取对数,即得到交叉熵损失函数(交叉的意思大概实说你1我就0):
取对数可以让求导更加方便,例如 log11+e−z=log1−log(1+e−z) l o g 1 1 + e − z = l o g 1 − l o g ( 1 + e − z ) 于是:
二、BP算法的推导
交叉熵损失函数的导数如上所示: dz=g(z)−y=a−y d z = g ( z ) − y = a − y
平方差损失函数求导为:
容易看出平方差的导数远小于交叉熵的导数,梯度下降的速度较慢且可能导致梯度消失。
假设第二层的输出为A,根据交叉熵损失函数的导数易得:
注意到 dA[1]=W[2]TdZ[2] d A [ 1 ] = W [ 2 ] T d Z [ 2 ] , 所以:
ps: 前向传播过程中W的行和同一层的Z的行相同,列和上一层的Z相同,而Z和A行列都相同,方便确定W和A的转置问题。
三、激活函数比较,正则化和过拟合问题
Relu相较于Sigmoid函数优点:
1、防止梯度消失(Sigmoid在两端梯度很小,反向传播涉及连乘放大效应)
2、稀疏激活性(<=0部分失活)
3、加快计算且平稳(Relu仅仅是if-else语句)
缺点:若输出值<=0无论反向传播的梯度多大,上一层得到的梯度都为0。
L2正则化:
L2正则化起作用的原因是减小了W的值防止权重过大, a为学习率:
作用:
1、防止过拟合
2、平衡模型的方差和偏差,拟合能力与泛化能力问题(防止参数过大避免训练集中独有的特征过多的影响模型结构)
3、特征选择和稀疏性(将一部分W减少为或接近0,使这部分特征不起作用)
L1正则化:
和L2类似,不过后面加的是
dropout正则化: 在前向传播过程随机使一部分神经元失活。
Batch normalization(BN): 和输入标准化处理类似,Batch normalization对 Z 进行标准化处理,ϵ 是为了防止分母为零,通常取 10−8:
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