一.Loss Function(损失函数) and Optimization(优化)
1.线性分类器:损失函数是评估分类器分类效果的,针对任意样本都可行
找到最小化损失函数的优化方向,找到最优参数
加入约束项:防止模型在训练集上过拟合
softmax 分类器:从评分–>概率问题
再引入log,变成信息的相关量 KL距离 相对熵
Q:KL散度的定义
KL散度就是相对熵
https://zh.wikipedia.org/wiki/相对熵
https://blog.csdn.net/ACdreamers/article/details/44657745
2.如何找到最优的W?
第一种方法:随机搜索
第二种方法:follow the slope 搜索空间有一定规律可寻 梯度下降
用数值梯度很慢,并且也不准确
用解析的方法 : 精确,很快,error-prone
随机梯度下降(SGD:stochastic gradient descent):
随机是指随机从训练集中取样 逼近
二:反向BP过程
梯度是线性算子,
考试:推到BP过程中的矩阵的计算
三:训练过程
一次性准备:激活函数,数据预处理,权重初始化,正则化,梯度
训练过程:参数更新,超参数
验证评估:模型整合
1.激活函数:为了引入非线性 sigmoid,tanh,ReLU,Leaky ReLU,Maxout,ELU
sigmoid:阈值[0,1],有类似与神经元的性质 梯度消失,不是0为中心,梯度只允许朝一个方向更新,exp计算量大
tanh:以0为中心,更快的饱和,梯度消失
ReLU:永远不会饱和,收敛速度快,没有以0为中心,有一半的权重没有被更新
选择数据不在dead relu的区域
Leaky ReLU:不会进入dead的区域 PReLU:将max(ax,x)a是可以训练的
Maxout:去最大值
- 2.预处理:零均值,标准化:为了更快的收敛 PCA
- 3.权重初始化:假定小的随机数
如果w很小:加的效应抵消不了乘,导致所有的输出都基本为0,BP也没法做
如果w很大:很快的饱和,梯度也为0
Xavier 初始化:
tanh:
w = np.random.randn(fan_in,fan_out)/np.sqrt(fan_in)
Relu:
w = np.random.randn(fan_in,fan_out)/np.sqrt(2/fan_in)
4.batch normalization:零均值,单位方差
5.训练过程的把握:
e-3 e-5
什么情况下cost不变,但是accuracy也会增加?
6.超参数的优化:在log space上
随机搜索,网格搜索:
7.归一化
tensor: (N,C,H,W)
normalization:一般对N做,不对C做,也可以对H,W做
根本上的不同是:把分布移到一个合理的位置
8.优化方法:
条件数是什么,海森矩阵是什么:
predicate condition是什么:
SGD:鞍点(梯度很小) 问题 局部最优点,陷在其中,很难出来
高维空间的鞍点更容易出现 维度越多,不同方向的梯度可能会很小,形成一个坑
SGD + Momentum
相当于对gradient做了平滑,抹去了一些噪声 白噪声高斯分布
会带着之前的动量,然后容易跳出鞍点
AdaGrad:
平方之后没有方向了 梯度大
Adam:现阶段比较好
9.正则化
加入罚项:
L2:ΣΣW^2
L1
dropout:随机扔掉一些neuron,