机器学习 学习记录
我将用三篇文章分别阐述以下三个方面
1. Linear Regression
2. Logistic Regression
3. Deep Learning
在具体阐述各个方面之前,我们先要明确一个基本问题:What is machine learning?
其实机器学习的概念在很早之前就被提出,在近几年再一次火了起来。本质上来说机器学习无非就是让计算机从你的输入中提取出来你想要的结果。比如,我想要一个身高和体重之间的关系模型,然后利用这个模型对某些数据进行预测(给一个人身高就能输出可能的体重)。为了得到这个模型,我需要事先收集一些数据,利用这些数据对机器进行训练,让机器找到一个最好的模型。
到这里,机器学习的概念大致就讲清楚了。那么问题又来了:How to make machine learn by itself ?
通过上面的阐述,你其实也能了解机器学习并不是完全靠着机器自己去学习,事先我们要给机器明确学习的方法,以及学习的具体内容。
所以在这里要引出机器学习的一般步骤(我们要做那些事情):
1.Model :我们首先需要给机器设定一个模型。模型在本质上就是一个函数集合。机器要做的就是在这个庞大的函数集合里寻找一个合适的函数使得输入数据通过这个函数之后能够得到尽量符合需求的输出
2.Goodness of Model:这一步,我们需要设定一个方法,让机器能够利用这个方法寻找那个我们想要的函数
3.Find the best Function:找一个最优秀的函数
下面介绍的就是具体内容啦
1.Linear Regression
继续上面举过的例子,我现在希望机器帮我找到人的身高和体重的关系。在这之前我做了个调研(假装做了),得到了以下数据:
Height {
x:[140,165,170,175,172,171,180,103]}
Weight {
y:[40,45,56,65,66,59,81,30]}
上面的数据好像是有一定的线性关系的(这里应该有图)
所以我们建的模型应该是线性的:y=w*x+b,那么机器学习的第一步我们就做完了,这一步就是给机器限定了一个函数集合,机器只能从这个函数集合里面去找一个合适的函数。
那第二步就是找一个方法,让机器能够按照这个方法去找一个最合适的函数
我们定义了一个Loss Function用来衡量误差
显然,我们希望这个误差越小越好,误差越小,所拟合出来的函数就越能反映出我们所输入训练数据之间的线性关系。
所以现在的问题就变成了,找这样一组 w 和
Gradient Descent:
对于上面的Loss Function ,我们可以把它看作为关于w,b的二元函数,于是这个问题就转化成了如何去求解二元函数的最小值点问题。数学分析告诉我们可以通过求偏导的方法找到极值点,即:
我们看下面的图
![]()
图片引用自李宏毅(台湾大学)《机器学习》
这张图是在一维函数上去考虑的。事先我们是不知道极值点到底在哪的,于是我们随机设定了一个点w0,求这个点的导数,如果导数大于零,说明极小值点在这个点的左边,导函数小于零说明极小值点在这个点的右边。接着我们更新这个点的坐标,当导函数小于零时,增大坐标,大于零时减小坐标。这样随着操作次数的增加,总是能找到一个导函数为零的点,这时候这个点就是我们所说的极小值点。数学上的表达如下:
如果是二元函数,表达如下: