针对深度学习基础部分,有必要恶补一些吴恩达的深度学习课程,其实晚上有很多总结和笔记,本系列文章是针对黄海广大佬整理的《深度学习课程笔记(V5.47)》的总结和自己的理解,以便加深印象和复习。
1 第一周 深度学习引言
1.1 深度学习为什么会兴起
- 数据规模
数据规模越来越大,远超过传统机器学习算法的学习能力。 - 计算量
-
算法的创新
发展和提出了多样的神经网络,具有强大的计算机能力
image - 计算机硬件的发展
比如GPU、TPU的出现
2 第二周 神经网络的编程基础
2.1 逻辑回归
下面是逻辑回归的输出函数:
2.2 损失函数
损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function:( , ).通过这个称为的损失函数,来衡量预测输出值和实际值有多接近。
逻辑回归用的损失函数为:
为什么用这个函数作为损失函数?
2.3 梯度下降算法
梯度下降算法就是为了通过 最小化代价函数(成本函数)J(w,b)来更新参数w和b,说白了就是原先的w和b会使函数更大,需要更新一下,使损失变小。
逻辑回归的代价函数(成本函数)(, )是含有两个参数的:
3 第三周 浅层神经网络
3.1 激活函数
- sigmoid
sigmoid激活函数曲线像一个字母"S",我们选择它作为激活函数的主要原因是sigmoid的值域为(0,1).因此,它特别适合用于我们必须将概率预测为输出的模型。由于任何事件发生的概率仅存在于0和1的范围之间,因此sigmoid是不错的选择。
softmax函数是一种更通用的逻辑激活函数,用于多类分类。
- tanh
tanh看起来和sigmoid差不多。tanh 函数是 sigmoid 的向下平移和伸缩后的结果。对它进行了变形后,穿过了 (0,0)点,并且值域介于+1 和-1 之间,函数图像也是S形。
但是tanh效果总是优于 sigmoid 函数。因为函数值域在-1 和+1 的激活函数,其均值是更接近零均值的。在训练一个算法模型时,如果使用 tanh 函数代替 sigmoid 函数中心化数据,使得数据的平均值更接近 0 而不是 0.5.
tanh函数主要用于两类之间的分类任务。
重点:sigmoid 函数和 tanh 函数两者共同的缺点是,在特别大或者特别小的情况下,导数的 梯度或者函数的斜率会变得特别小,最后就会接近于 0,导致降低梯度下降的速度。
- relu
ReLU是目前使用最多的激活函数,它几乎用于所有卷积神经网络或深度学习。
值域是[0,无穷]
-
leaky relu
Leaky Relu。 当x是负值时,这个函数的值不是等于 0,而是轻微的倾斜,如图。 这个函数通常比 Relu 激活函数效果要好,尽管在实际中 Leaky ReLu 使用的并不多
relu和leaky relu的优点: 第一,在的区间变动很大的情况下,激活函数的导数或者激活函数的斜率都会远大于0,在程序实现就是一个 if-else 语句,而 sigmoid 函数需要进行浮点四则运算,在实践中, 使用 ReLu 激活函数神经网络通常会比使用 sigmoid 或者 tanh 激活函数学习的更快。第二,sigmoid 和 tanh 函数的导数在正负饱和区的梯度都会接近于 0,这会造成梯度弥散,而 Relu 和 Leaky ReLu 函数大于 0 部分都为常熟,不会产生梯度弥散现象。(同时应该注 意到的是,Relu 进入负半区的时候,梯度为 0,神经元此时不会训练,产生所谓的稀疏性, 而 Leaky ReLu 不会有这问题)
激活函数选择的经验:1 . 如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所 有单 元都选择 Relu 函数。2. 这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会 使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当是负值的 时候,导数等于 0。
-
常见激活函数比较
3.2 为什么要用激活函数
如果你是用线性激活函数或者叫恒等激励函数,那么神经网络只是把输入线性组合再输 出。
如果你使用 线性激活函数或者没有使用一个激活函数,那么无论你的神经网络有多少层一直在做的只是 计算线性函数,所以不如直接去掉全部隐藏层。
4 第四周 深层神经网络
4.1 参数VS超参数
深度神经网络的超参数指:算法中的学习率(learning rate)、iterations(梯度下降法循环的数量)、L(隐藏层数目)、、choice of activation function(激活函数的选择)都需要我们自己来设置,这些数字实际上控制了最后的参数和的值,所以它们被称作超参数。