机器学习笔记(吴恩达老师)
第一章 引言
第二章 单变量线性回归(Linear Regression with One Variable)
第三章 线性代数回顾(Linear Algebra Review)
单变量线性回归 Linear Regression with One Variable
一、模型表示
以上文中提到的预测住房价格为例,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。那么,你可以做的一件事就是构建一个模型,也许是条直线,从这个数据模型上来看,也许你可以告诉你的朋友,他能以大约220000(美元)左右的价格卖掉这个房子。这就是监督学习算法的一个例子。
常见的监督学习的方式:
- 回归问题——我们根据之前的数据预测出一个准确的输出值,我理解的是连续的输出值(y),后面有了新的理解再更改。
- 分类问题——我们想要预测离散的输出值,例如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是0/1离散输出的问题。
在监督学习中我们有一个数据集,这个数据集被称为训练集。
在以下的学习中用小写的m表示训练样本的数目。
以之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示:
用来描述这个回归问题的标记如下:
m代表训练集中实例的数量
x代表特征/输入变量
y代表目标变量/输出变量
(x, y) 代表训练集中的实例
代表第 i个观察实例
h代表学习算法的解决方案或函数也称为假设(hypothesis)
这是一个监督学习算法的工作方式,输出函数通常表示为小写h(hypothesis假设),根据输入的x值得出y值,h是一个从x到y的函数映射。
一种可能的表达方式为:
因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
二、代价函数
这一部分内容有助于我们弄清楚如何把最有可能的实现与我们的数据相拟合。
m代表训练样本的数量,比如m=47。我们要做的事为我们的模型选择合适的参数(parameters) 和 。
我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)
参数值不同,得到的函数也不相同,举个例子如下:
如何确定参数的值:我们要使建模误差仅尽可能小,也就是预测的值尽可能接近真实值。如下图所示。所以我们的目标转变为选择出可以使得建模误差的平方和能够最小的模型参数。(下图紫色字体的函数)
即使得代价函数最小。代价函数有时也被称为平方误差函数。
三、代价函数的直观理解Ⅰ
为什么代价函数要除以2?
先根据经验指定h(x)中θ0和θ1的值,通过带入样本数据中的x的值,求得假设函数的值h(x)。然后得出样本数据集中每组数据的假设值和实际值y的差的平方,对这m组数据差的平方进行求和,然后除以m,得到平均值。除以2,可以将数值缩小方便计算,且不影响准确性,方便计算。
以上左图为假设θ0=0,只考虑θ1(斜率)的情况,θ1分别取不同的值,计算出代价函数,并将代价函数的值作为输出绘制右图中,如右图所示,最低点为(1,0)点,说明θ1取1时,代价函数的值最小,回归函数最优。
四、代价函数的直观理解Ⅱ
仍然要围绕代价函数展开,与前一部分不一样的是,对代价函数图形化时,我们要保留全部参数θ0和θ1。当有两个参数时,将代价函数图形化如下,是一个三维图。
我们也可以用等高线图来表示这个碗状结构。
等高线图是一个更简便的方式来显示函数J,等高线上的点J值都相等,等高线图,则可以看出在三维空间中存在一个使得J(θ0,θ1)最小的点,就碗状底部这一点,这些椭圆形的中心。
通过这些图形,我们能更好地理解这些代价函数J所表达的值是什么样的,它们对应的假设是什么样的,以及什么样的假设对应的点,更接近于代价函数J的最小值。
当然,我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数J取最小值的参数θ0和θ1来。
五、梯度下降
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1)的最小值。
如下图,想象一下这是两座连接的山,我们站在山顶上的红色一点,在梯度下降算法中,我们要做的就是旋转360环顾四周,思考如果向山下迈一小步,从哪个方向会更快下山?我们便向哪个方向迈一步,然后继续环顾四周,再想一次向哪个方向迈一小步会更快下山,便再向那个方向迈一步。一直重复这个步骤,从新的点环顾四周,并决定从什么方向会最快下山,以此类推,知道接近局部最低点的位置。
倘若我们不站在山顶的那一点,我们的位置向右偏移一些,也就是站在山顶靠近上一个点的另一个点,旋转360环顾四周,思考如果向山下迈一小步,从哪个方向会更快下山?便向哪个方向迈一步,然后继续环顾四周,重复以上步骤,我们会发现我们的路线和刚刚的路线完全不同。
批量梯度下降的算法公式如下,其中𝛂是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。
在梯度下降算法中,我们要更新θ0和θ1,当 j=0 和 j=1 时,会产生更新,如果你要更新这个等式,需要同时更新θ0和θ1,实现方法是:计算公式右边的部分,丙通过那一部分计算出θ0和θ1的值,同时更新θ0和θ1。
如上图左侧的更新方法是正确的而右边的是错误的。
右侧的算法或许也能解决一些实际问题,但他并不是人们所指的那个梯度下降算法,而是具有不同性质的其他算法。由于各种原因,这其中会表现出微小的差别。
这就是梯度下降算法的梗概。
六、梯度下降的直观理解和意义
1.导数项的意义
还是以只讨论一个参数为例,函数 J 的图像如上图所示,更新θ1的公式为上图右侧所示:
-
我们先假设起始点是偏右侧的点,那么该点切线的斜率为正(即导数为正),更新θ1时减掉的是一个正数,就意味着在θ1左侧方向时梯度下降最快的方向,一直迭代,最终可以得到最小值。
-
我们再假设起始点是偏左侧的点,那么该点切线的斜率为负(即导数为负),更新θ1时减掉的是一个负数,就意味着在θ1右侧方向时梯度下降最快的方向,一直迭代,最终可以得到最小值。
2. 学习率的意义
- 如果学习速率很小
首先初始化我们的梯度下降算法,我们每次更新θ1时,θ1的变化很小,也就是说我们每次只移动一小小步(baby step),随着梯度下降法的运行,移动的幅度会越来越小,这样就需要很多步才能到达最低点。
所以如果学习速率太小的话,梯度下降会很慢,因为他要一点一点的挪动。
- 如果学习率很大
我们每次更新θ1时,都向左或向右迈出一大步,梯度下降时可能会越过最低点,甚至可能无法收敛或者发散,随着梯度下降法的运行,移动的幅度会越来越大。
所以如果学习速率太大的话,可能无法收敛或者发散。
- 那么如果已经处在最低点的话,下一步梯度下降会怎样?
如上图,局部最低点的切线斜率为0,也就是J对θ1的导数为0,那么θ1便永远不会改变,所以梯度下降法对于已经在局部最低点的点就没有任何作用。
我想找到它的最小值,首先初始化我的梯度下降算法,在那个品红色的点初始化,如果我更新一步梯度下降,也许它会带我到这个点,因为这个点的导数是相当陡的。现在,在这个绿色的点,如果我再更新一步,你会发现我的导数,也即斜率,是没那么陡的。随着我接近最低点,我的导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点点。然后我想再梯度下降一步,在这个绿点,我自然会用一个稍微跟刚才在那个品红点时比,再小一点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所以,我再进行一步梯度下降时,我的导数项是更小的,θ1更新的幅度就会更小。所以随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现,已经收敛到局部极小值。
回顾一下,在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小。
七、线性回归的梯度下降
接下来,我们把梯度下降算法应用在线性回归的代价函数上,以求得θ0和θ1为何值时代价函数取得最小值。下图是梯度下降算法和线性回归算法的比较图。
接下来计算上图中的标红部分(求偏导)
接下来应用以上公式,梯度下降代价函数:
梯度下降的过程中,代价函数上的取值发生变化的同时,假设函数也在发生变化。
假设函数似乎越来越符合数据
最后梯度下降到了全局最小值。
我们刚刚使用的算法,有时也称为批量梯度下降。实际上,在机器学习中,通常不太会给算法起名字,但这个名字”批量梯度下降”,指的是在梯度下降的每一步中,我们都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有m个训练样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。
如果你之前学过线性代数,有些同学之前可能已经学过高等线性代数,你应该知道有一种计算代价函数J最小值的数值解法,不需要梯度下降这种迭代算法。在后面的课程中,我们也会谈到这个方法,它可以在不需要多步梯度下降的情况下,也能解出代价函数J的最小值,这是另一种称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。