1 训练数据(training_data)、验证数据(validation_data)、测试数据(testing_data)的区分:
训练数据:模型参数(权重和偏置)的学习,建立模型
验证数据:模型超参数性能的评估(超参数:模型算法本身设置的参数如学习率、epoch、batch_size、初始权值、卷积核个数和大小等等)
测试数据:评估模型的泛化性能
2 常见的几种参数更新方法:
SGD(随机梯度下降法)、Momentum(动量法)、AdaGrad(基于学习率衰减)、Adam(结合Momentum和AdaGrad)、RMSProp(改进了AdaGrad中出现更新为0的情况)、Adadelta(AdaGrad的发展)
(1)SGD:
η为学习率;SGD的缺点:如果损失函数非均向则其搜索最小值的过程非常低效
#SGD更新参数: w=w-lr*grads
class SGD:
def __init__(self,lr=0.1):
self.lr=lr
def update(self,params,grads):
for key in params.keys():
params[key]-=self.lr*grads[key]
(2)Momentum:
参数α设定为0.9之类的值,初始化时v为空值;减弱了SGD方法的低效问题
#动量法更新参数 :w=w+v; v=momentum*v-lr*grads
class Momentum:
def __init__(self,lr=0.1,momentum=0.9):
self.lr=lr
self.momentum=momentum
self.v=None
def update(self,params,grads):
if self.v is None:
self.v={}
for key,val in params.items():
self.v[key]=np.zeros_like(val)
for key in params.keys():
self.v[key]=self.momentum*self.v[key]-self.lr*grads[key]
params[key]+=self.v[key]
(3)AdaGrad:
h保存了以前所有梯度值的平方和,通过1/h**(1/2)调整参数的学习率,如果一直更新会出现更新为0的情况,因为AdaGrad记录过去所有的梯度平方和,随着学习的深入,更新量的变化会越来越小直至完全不更新
#AdaGrad法更新参数 :h=h+grads*grads :w=w-lr*grads/(h)^(1/2)
class AdaGrad:
def __init__(self,lr=0.1):
self.lr=lr
self.h=None
def update(self,params,grads):
if self.h is None:
self.h={}
for key,val in params.items():
self.h[key]=np.zeros_like(val)
for key in params.keys():
self.h+=grads[key]*grads[key]
params[key]-=self.lr*grads[key]/(np.sqrt(self.h)+1e-7)
(4)Adam:
结合Momentum和AdaGrad;具体如下:
其中常用β1=0.9,β2=0.999,微小值epsilon防止分母出现0
(5)RMSProp:
RMSProp是对AdaGrad的改进,相对于AdaGrad,RMSProp增加了一个衰减系数控制累计梯度平方和,具体如下:
h=ρh+(1-ρ)*grads[w]*grads[w];
w=w-lr/((h+α)**(1/2))*grads[w]; 其中α为微小值防止分母出现0
(6)Adadelta :
AdaGrad的发展,具体如下:
总的来说:没有哪一种方法能在所有问题上都表现的最好,需要根据具体问题选择适当的方法
3 权值初始值:
一般设为标准差为某个值的高斯分布;初始值的选取会影响激活函数输出值的分布,不合适的初始值会产生梯度消失的问题
(1)Xavier 权重初始值:n为前一层节点数,初始值为标准差为:1/np.sqrt(n)的高斯分布,适用于sigmoid,tanh等曲线激活函数
(2)Relu初始值:标准差为:np.sqrt(2/n)的高斯分布
(3)std初始值;标准差为0.01的高斯分布
4 Batch Norm
调整激活值(激活函数输出值)的分布使其具有适当的广度,具体为向神经网络中插入数据正规化的层
(1)可以加快学习速度
(2)不那么依赖初始值
(3)抑制过拟合
以mnin batch(批量数据)为单位进行均值为0,方差为1的正规化
vb=1/m*np.sum(xi);方差a^2=1/m*np.sum(xi-vb)^2
xi=(xi-vb)/np.sqrt(a^2+10e-7)
正规化后进行缩放和平移变换:yi=γ*xi+B;初始γ=1,b=0
5 过拟合:
模型对于训练数据拟合程度高,对于未出现在训练数据中的其他数据拟合程度低,即模型泛化性能差,,一般由下面两种原因造成:
(1)模型有大量参数,表现力强;
(2)训练数据少
6 抑制过拟合(正则化:给损失函数加上某种限制,抑制过拟合):
(1)权值衰减:为损失函数加上权重的某种范数(L1或L2)
(2) Dropout:学习的过程中随机删除神经元的方法;训练时,随机选出隐藏层的神经元,然后将其删除,被删除的神经元不再进行信号的传递