写在前面:共同学习
大二小白,刚刚接触机器学习。如果有任何问题,希望各位批评指正。
互相关注,共同进步呀。
课堂内容
- Gradient Descent 梯度下降
- Review Gradient Descent 复习上一节课的梯度下降的内容
- learning rates 学习率
- Adaptive Learning rates 自适应学习速率
- Adagrad 自适应梯度算法
- Stochastic Gradient Descent 随机梯度下降算法
- Feature Scaling 特征缩放
- learning rates 学习率
- Review Gradient Descent 复习上一节课的梯度下降的内容
Review :Gradient Descent
𝜃∗ = arg min 𝐿(𝜃) L: loss function 𝜃: parameters
在上节课说道,我们在得出最后的 loss function 之后,通过求得loss function的最小值可以得到一个最小的参数θ
θ越大,代表着我们拟合的函数越不准确。
而不准确就意味着需要继续进行迭代更新。
那么如何进行更新呢?在上节课已经讲到了:
首先就需要找到一个θ0和θ1作为起始的参数,怎么找?随机找,使用random函数或者其他方法。
在图中运用矩阵阐述了更新的方法,
这里要说明的是,在吴恩达机器学习的课程中提到:参数的更新是同时的,不是穿插进行更新的
learning rates 学习率
learning rates 代表了学习速率的快慢,learning rates越大,梯度下降得就越快。
正所谓做事需要有工匠精神,好高骛远必将一事无成。
所以如果leanring rates 非常大,就会导致我们所更新的θ非常迅猛,θ变化了,loss function就会变得越来越大。
当然learning rate 也不能太小,除非有足够的耐心和时间等它慢慢磨。
在左边的图中:
- 黑色的实线是loss function。
- 如果我们的学习率调整的非常好(比如红线),它就会大概按照我们想要的方式进行下降。
- 如果我们的学习率调整得有点大或者非常大(图中绿线和黄线),那么会得不到我们想要的结果
- 如果我们学习率调整得非常小(蓝线),那么需要多次计算才能得出我们想要的结果,但是这样无疑会加大资源的消耗
这样的可视化是一维或者二维图型,我们想研究更高维的图型的话就需要像右边的图像一样进行数据可视化
可以把横坐标理解为迭代次数:
- 如果学习率刚刚好(红线),那么似乎下降速度相对于其他的比刚刚好,不慢不快
- 如果学习率非常小(蓝线),那么它下降得就很慢很慢。
- 如果学习率有点大(绿线),那么它一开始下降得非常快,最后似乎看起来却无法下降了(特殊情况特殊说明,实际情况可能有所偏差)
- 如果学习率特别大(黄线),那么它最终的结果是完全偏离了我们的目标
有这种情况的问题就是,随着迭代次数的增加,我们的learning rates却不变,或许一开始的learning rates不是很大,但是迭代次数增多了,如果θ变小了,相对于此时的θ,learning rates 就显得有些大了。所以我们希望能够让learning rates自己变化,自己调节,从而我们能够更好得达到目的
所以引申出算法:Adaptive Learning Rates 自适应学习率
Adaptive Learning Rates 自适应学习率
自我调节的学习率的目的是更方便得得到想要的结果,减少人为得去试错learning rates的工作量
一个简单的思想:通过一些因子在每次迭代的时候减少学习率
- 开始的时候,我们的起始点比较远,所以我们可以把学习率设置大一点
- 靠近极小值点的时候,这个时候应当减少学习率。
比如使用下图所示的函数,t表示迭代的次数
即使这样,我们也需要做到:对于不同的参数,我们给出的learning rates也要不尽相同。
Adagrad自适应梯度算法
文字描述颇为复杂也意义不大,在这里不多加赘述,所以使用数学描述更加直观和方便理解(就是直男不会说话……)
- 一般的梯度下降:
- Adagrad 算法的梯度下降:
上图是对θt的一种解释
通过这样的一种算法,我们的learning rates 相对于一般的梯度下降改变得更加灵活:
这就是最后化简得出来的式子。看起来比较复杂,却能够更快得去拟合我们想要的参数。
Stochastic Gradient Descent 随机梯度下降算法
和一般的梯度下降不一样的是,随机梯度下降是随便取一组参数就作为我们的数值得到loss function 和目标参数的更新:
- 普通的loss function
- 随机梯度下降的loss function
这样的做法加快了我们更新参数的速率和效果
在左边的图中,当我们用原本的方法去求得loss function时候,得到的只会是一个数值,这个数值不一定是全局最优解。
但是在右边的图中,我们通过随机得去求得loss function,或许跨度十分得大,但是似乎离我们的最优解更加得靠近了。
特征缩放
特征缩放的作用是防止参数值得差距非常大,导致小的参数值对最后结果的“贡献”十分得小。
比如:
对x1和x2来说,x1和x2的分布范围的差距非常大,所以我们就需要进行特征缩放,让两个特征值得范围差不多。
那为什么要进行特征缩放呢?
我们详细解释一下以下这张图
对于左边的图:
- x1和x2范围的差别非常大,导致我们改变w1其实对最后的y的变化是及其微弱的
- 所以我们在进行梯度下降的时候,由于差别过大,对w1的偏微分非常小,我们就需要较大的learning rates,而对w2的偏微分非常大,所以我们就需要较小的learning rates。
- 但是这样非常麻烦,即使有Adagrad,似乎也会出错一样
对于右边的图
- x1和x2的变化范围基本一致,w1和w2的偏微分就几乎一样
- 这样我们进行梯度下降就不需要像左边的图一样突然改变learning rates,只需要循序渐进得慢慢减少就可以得到一个准确的结果。
** 实现缩放的方法**
这个方法在吴恩达机器学习也有强调
对第r个例子的第i次输入:用当前数据减去平均值再除以标准差即可。
后面就是数学补充部分,就不再赘述了。