前言
最近在学习深度学习,一下是对学习内容的一些记录,本文主要讲述梯度下降中涉及得数学公式推导以及算法的理解
梯度下降原理
为什么要引入梯度下降?
当我们得到了一个目标后,如何进行求解?是直接求解吗?
并不一定可解(线性回归可以当作是个特例)
常规套路:机器学习的套路就是我交给机器一堆数据,然后告诉它什么样的学习方式是对的(目标函数),然后让它朝着这个方向去做。
如何优化:一口吃不成一个胖子,要静悄悄的一步一步的完成迭代(每次优化一点,累计起来就是个大成绩)
假设一个目标函数:
其中1/2是一个系数,m是样本的个数。
我们要找到山谷的最低点,也就是我们的目标函数的终点(什么样的参数能使得目标函数达到极值点)
问题:下山分几步走呢?(更新参数)
(1)找到当前最合适得方向
(2)走那么一小步,走快了就会容易“摔倒”(走快了容易从收敛状态到不收敛状态)
(3)按照方向与步伐去更新我们得参数
梯度下降方法对比
目标函数(损失函数):
批量梯度下降(BGD)
(容易得到最优解,但是由于每次考虑所有样本,速度很慢)
随机梯度下降(SGD)
(每次找到一个样本,迭代速度快,但不一定每次都朝着收敛的方向,所以收敛速度不快)
小批量梯度下降(MBGD)
(每次更新选择一小部分数据来算(把数据分成很多小Batch),比较实用)
优缺点:
①通过矩阵运算,每次在一个batch上优化参数并不会比单个数据慢太多。
②每次使用一个batch可以大大减少收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
③可实现并行化
学习率对结果的影响
学习率(步长):对结果会产生巨大的影响,一般小一些比较好。
如何选择:一般会选择较小的,不行再调小。
批处理数量:32,64,128都可以,很多时候还要考虑内存和效率。
一般选择较小的学习率,和较大的迭代次数。