深度学习入门

---恢复内容开始---

Softmax函数,或称归一化指数函数

逻辑函数的一种推广。它能将一个含任意实数的K维向量 {\displaystyle \mathbf {z} } “压缩”到另一个K维实向量 {\displaystyle \sigma (\mathbf {z} )} 中,使得每一个元素的范围都在{\displaystyle (0,1)}之间,并且所有元素的和为1。该函数的形式通常按下面的式子给出:

{\displaystyle \sigma (\mathbf {z} )_{j}={\frac {e^{z_{j}}}{\sum _{k=1}^{K}e^{z_{k}}}}}    for j = 1, …, K.

wiki的资料看完了,就感觉softmax的作用只有归一化。

 

cross-entropy loss  : cost = -1 / m * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))  最后要除以m也就是样本个数,所以每一次不管用的batch多大,都是可以的

 

Coursera 深度学习系列5课程,第一个课程的视频我刷完了,现在正在刷第二个的。

就从第二个开始记笔记吧,目的就是整理一些最基本的知识点。

 

第二期课程

Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization

第一周

Title: Normalizing Input

1,所有都减去均值,zero-mean

2.将方差归一化

对训练集和测试集使用同样的均值和方差进行归一化,指数值上的同样

当输入数据在不同维度上取值范围相差很大,梯度下降会运行的很慢,就需要归一化。

Title: Vanishing/ exploding gradinets 梯度的消失和爆炸

很深的神经网络里,参数W里面的值不断乘起来,可能爆炸,也可能消失,对应的梯度也是一样

 

Title: Weights initialization for DNN

有几个常见的设置初始参数的方法,让W的方差等于1/n,n是输入神经元的数量

 

Title: gradient check

用公式计算一遍dtheta, 再用数值的方法计算一遍dtheta,比较是否大致相等,看看求导的部分有没有做错。数值方法不需要你自己计算导数的,数值法使用J(w+e),J(w-e)

最后算两个结果的欧氏距离

 

title: mini-batch gradient decent

把大的训练集分成小的batch,用一个for循环对每个batch进行计算

min-batch的大小设为训练集大小时,就是batch gradient decent,批梯度下降,每一步运行的噪声相对小,很慢

设为1时,就变成随机梯度下降,每一步运行的噪声相对大,但是总体还是下降的,一般不会收敛。运算没有利用向量化加速的优点。

一般选择64到512作为mini-batch-size,取2的幂算起来更快一些

这也算是一个超参数了

 

title: exponentially weighted average 指数加权平均

y哇这个东西和互补滤波那个一样的,移动平均滤波里,y = theta * y(-1) + (1-theta)x(0)

这时候的y近似于前 1/(1-theta) 个数据的平均

这里以1/e为一个基准,判断这个数据有没有被算入平均

 

title: bias correction

一开始使用指数加权平均的时候,y(0) = 0会造成开始的那部分数据的偏差

那么把 y = y ( 1 - theta^t) t代表index,这种估计能把一开始的偏差给减少

 

title: gradient decent with momentum

Vdw(t = 0) = theta * Vdw(t= -1) + (1-theta)dw

Vdb(t = 0) = theta * Vdb(t = -1) + (1-theta)db

 

title: RMSprop

dw = dw / ||w||2

db = db / ||b||2

基本上效果都好于直接的梯度下降,举得例子的原理还是避免某个维度的梯度一直震荡的问题

 

title: Adam optimization (很多优化算法被提出,很多不general,adam被证明是比较general和效果好的

adam是momentua+RMSprop

theta参数分别有推荐值0.9,0.99

 

title: learning rate decay

为了避免在最后的部分的震荡和噪声

一种衰减模型learning rate: alpha = 1 / (1 + decay * iterationindex) * alpha(0)

也可以有其他的模型比如指数衰减

 

title: problem of local optimal

深度学习中,遇到的梯度为0的点,不太可能是极大极小或者最大最小值,而应该是鞍点,在某些维度上是极大,某些维度上极小

低维空间里的直觉并不都适用于高维空间

停滞区,导数一直为0的一块区域。算法会在停滞区消耗很长时间来找到下一个坡进行下降,这里我没怎么看懂其实。反正鞍点肯定是要越过去的把。

我们的算法遇到鞍点会停下吗?

---恢复内容结束---

 

 

第一周作业部分:

sigmoid with numpy, numpy操作对不同维度的数据都可以进行,以element-wise的模式

sigmoid的导数,sig = s, dervite = s* (1-s)

reshape((shape))

按行归一化,如果矩阵[[1,2],[3,4]], 先求x_norm = x_norm = np.linalg.norm(x,axis = 1, keepdims = True)

也就是[[sqrt(5)], [5]]这样一个列向量,然后矩阵除以norm,根据broadcasting的性质可以归一化

Note that np.dot() performs a matrix-matrix or matrix-vector multiplication. This is different from np.multiply() and the * operator (which is equivalent to .* in Matlab/Octave), which performs an element-wise multiplication.

np.dot是正常的矩阵乘法,multiply和乘号是元素是element-wise形式的乘法

L1 LOSS: loss = np.sum(abs(yhat - y))

L2 LOSS: loss = np.sum(np.square(yhat - y))

cross-entropy loss

https://zhuanlan.zhihu.com/p/35709485

posted @ 2019-06-02 18:32  zherlock  阅读(260)  评论(0编辑  收藏  举报