深度学习 查漏补缺篇章

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/e01528/article/details/82942539

本篇博客作为复习深度学习时,查漏补缺所用。

目录

Part1. ng课程复习与思考

1. 在神经网络当中,x是 n行m列 ,m个样本,n表示特征向量  /* 列叠加 */

2. 为什么凸函数有利于梯度下降(优化)?

3. 为什么  归一化后加快了梯度下降求最优解的速度?

 4. 为什么  归一化有可能提高精度?

5. 梯度下降大局观

6. logistic代价函数的解释

7. python中的广播  numpy和广播使我们可以用一行代码完成很多运算

8. assert(a.shape==(n,1))避免shape为(n,)的向量,reshape的使用

9. 激活函数小对比


Part1. ng课程复习与思考

1. 在神经网络当中,x是 n行m列 ,m个样本,n表示特征向量  /* 列叠加 */

      y=wt*x+b中的x是n行m列,脑子中不是想着下面的图1这种,而是矩阵np相乘

比如,本来x的shape是3*1,w是4*3,得到的z就是4*1,其中4代表4个隐藏层的单元数,1代表1个样本。

现在X是多个样本,是3*m,w还是4*3,得到的Z就是4*m,4代表隐藏层的单元数,m代表的是样本数。

      向量化运算,尽量避免用for语句,比如m个样本,不用for i in  range(m) n个特征。

2. 为什么凸函数有利于梯度下降(优化)?

    凸函数的性质:1.二阶可导 2.二阶导数>0 3.局部最优就是全局最优 

    梯度下降得到的结果可能是局部最优值。如果F(x)是凸函数,则可以保证梯度下降得到的是全局最优值。

    下图为梯度下降的目的,找到J(θ)的最小值。

其实,J(θ)的真正图形是类似下面这样,其是一个凸函数,只有一个全局最优解,所以不必担心像上图一样找到局部最优解

3. 为什么  归一化后加快了梯度下降求最优解的速度?

     如下图所示,蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;

 4. 为什么  归一化有可能提高精度?

     一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

5. 梯度下降大局观

      代价函数求导,更新 w=w−α∗J′(w),通过更改w b使得到达最近似值。

6. logistic代价函数的解释

      https://www.cnblogs.com/liaohuiqiang/p/7659719.html 7.1部分 【最大似然的思想使已有的数据发生的概率最大化,相乘最大】

7. python中的广播  numpy和广播使我们可以用一行代码完成很多运算

    加减乘除都是

8. assert(a.shape==(n,1))避免shape为(n,)的向量,reshape的使用

比如a 的 shape是(5, ) ,当你计算np.dot(a,a.T)的时候得到的是一个实数,a和a的转置,它们的shape都是(5, )。

如果a 的 shape是(5, 1),你计算np.dot(a,a.T)的时候得到的就是一个5*5的矩阵。a的shape是( 5, 1),而a.T的shape是( 1, 5 )。

a.shape = (5, )这是一个秩为1的数组,不是行向量也不是列向量。很多学生出现难以调试的bug都来自秩为1数组。如果你得到了(5,) 你可以把它reshape成(5, 1)或(1, 5),reshape是很快的O(1)复杂度

9. 激活函数小对比

      通常来说,很少会把各种激活函数串起来在一个网络中使用的。

  sigmoid tanh relu leakly relu
优点

1. 输出层还是使用sigmoid,因

2. 为它输出[0,1]更符合概率分布

关于原点

中心对称

1. ReLU 对于 SGD 的收敛有加速作用,有人认为是由于它的线性、非饱和所致。

2. ReLU 只需要一个阈值就可以得到激活值,不用去算一大堆复杂的(指数)运算

为解决“ ReLU 死亡”问题的尝试。
缺点

1. 不关于原点中心对称

2. 梯度消失

梯度消失

1.relu的缺点是当z小于等于0时导数为0

2. 它在训练时比较脆弱并且可能“死掉”。   合理设置学习率,会降低这种情况的发生概率。实在不行尝试 Leaky ReLU、PReLU 或者 Maxout.

1. 论文指出这个激活函数表现不错,但是其效果并不是很稳定。

2. Delving Deep into Rectifiers 中介绍了一种新方法PReLU,然而该激活函数在在不同任务中表现的效果也没有特别清晰。

 

猜你喜欢

转载自blog.csdn.net/e01528/article/details/82942539