自己简略的, 有参考黄海广前辈 !黄博士GitHub
第1周
一、引言(Introduction)
1.1 欢迎
参考视频: 1 - 1 - Welcome
1.2 机器学习是什么?
参考视频: 1 - 2 - What is Machine Learning
机器学习是什么?第一个机器学习的定义来自于Arthur Samuel。他定义机器学习为:在进行特定编程的情况下,给予计算机学习能力的领域。
另一个年代近一点的定义,由Tom Mitchell提出:一个好的学习问题定义如下,一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当有了经验E后,经过P评判,程序在处理T时的性能有所提升。
1.3 监督学习
参考视频: 1 - 3 - Supervised Learning
监督学习指的是我们给学习算法一个数据集,这个数据集由“正确答案”组成。例如房价的例子中,给出一系列房子的数据,给定数据集中每个样本的正确价格(即实际售价),然后运用学习算法,算出更多的正确答案。比如某个新房子的价格。用术语来讲,这叫回归问题,试着推测出一个连续值的结果,即房子的价格。
机器学习问题中,可能遇到不止一种特征,甚至无限多的特征,以后会讲一个算法,叫支持向量机,利用巧妙的数学技巧,能让计算机处理无限多个特征。
基本思想是:数据集中的每个样本都有相应的“正确答案”,然后学习算法根据这些样本作出预测,比如回归问题和分类问题。
1.4 无监督学习
参考视频: 1 - 4 - Unsupervised Learning (14 min).mkv
无监督学习中,已知的数据没有任何的标签,或者是有相同的标签,或者就是没标签。所以我们已知数据集,却不知如何处理,也不知每个数据点是什么。就是一个数据集,你能从数据中找到某种结构吗?针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个簇,那是另一个簇,二者不同。无监督学习算法可能会把这些数据分成两个不同的簇,所以又叫做聚类算法。
无监督学习或聚集有着大量的应用,比如大型计算机集群、社交网络的分析、市场分割和天文数据分析等,比如聚类算法给出了令人惊讶、有趣、有用的理论,解释了星系是如何诞生的。这些都是聚类的例子,聚类只是无监督学习中的一种。
无监督学习,是学习策略,交给算法大量的数据,并让算法为我们从数据中找出某种结构。
二、单变量线性回归(Linear Regression with One Variable)
2.1 模型表示
参考视频: 2 - 1 - Model Representation
第一个学习算法:线性回归算法。
预测住房价格的例子:使用一个数据集,数据集包含某市的住房价格,监督学习中我们的这个一个有“正确答案”的数据集,被称为训练集。首先根据不同房屋尺寸所售出的价格,画出我的数据集。比方你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。你可以构建一个模型,也许是条直线,从这个数据模型上来看,也许可以告诉你朋友他能以大约220000(美元)左右的价格卖掉这个房子。
在整个课程中,小写的
m
m
m表示训练样本的数目。
以房屋交易为例,假使我们回归问题的训练集(Training Set)如下表所示:
将要用来描述这个回归问题的标记如下:
m m m 代表训练集中实例的数量
x x x 代表特征/输入变量
y y y 代表目标变量/输出变量
( x , y ) \left( x,y \right) (x,y) 代表训练集中的实例
( x ( i ) , y ( i ) ) ({{x}^{(i)}},{{y}^{(i)}}) (x(i),y(i)) 代表第 i i i 个观察实例
h h h 代表学习算法的解决方案或函数也称为假设(hypothesis)
这是一个监督学习算法的工作方式,我们的训练集里有房屋价格,把它喂给我们的学习算法,学习算法工作之后,输出一个函数,通常表示为小写
h
h
h 。
h
h
h 代表hypothesis(假设),
h
h
h表示一个函数,输入是房屋尺寸大小,比如你朋友出售的房屋大小。
h
h
h 根据输入的
x
x
x值来得出
y
y
y 值,
y
y
y 值对应房子的价格。因此,
h
h
h 是一个从
x
x
x 到
y
y
y 的函数映射。
对于房价预测问题,如何表达
h
h
h 呢?
一种可能的方式为:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_\theta \left( x \right)=\theta_{0} + \theta_{1}x
hθ(x)=θ0+θ1x,只有一个特征/输入变量,因此这样的问题叫单变量线性回归问题。
2.2 代价函数
参考视频: 2 - 2 - Cost Function
定义代价函数的概念,如图:
线性回归中有一个这样的训练集,
m
m
m代表了训练样本的数量,比如
m
=
47
m = 47
m=47。而我们的假设函数,也是用来预测的函数,是这样的线性函数形式:
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_\theta \left( x \right)=\theta_{0}+\theta_{1}x
hθ(x)=θ0+θ1x。
引入一些术语:我们现在要做的是为模型选择合适的参数(parameters)
θ
0
\theta_{0}
θ0 和
θ
1
\theta_{1}
θ1,房价问题中便是直线的斜率和在
y
y
y 轴上的截距。
选择的参数决定了得到的直线相对于训练集的准确程度,模型预测值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)。
我们的目标是选择出使得建模误差的平方和最小的模型参数。 即使得代价函数
J
(
θ
0
,
θ
1
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J \left( \theta_0, \theta_1 \right) = \frac{1}{2m}\sum\limits_{i=1}^m \left( h_{\theta}(x^{(i)})-y^{(i)} \right)^{2}
J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2最小。绘制一个等高线图,三个坐标分别为
θ
0
\theta_{0}
θ0和
θ
1
\theta_{1}
θ1 和
J
(
θ
0
,
θ
1
)
J(\theta_{0}, \theta_{1})
J(θ0,θ1):
可以看出在三维空间中存在一个使得
J
(
θ
0
,
θ
1
)
J(\theta_{0}, \theta_{1})
J(θ0,θ1)最小的点。
代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。
2.3 代价函数的直观理解I
参考视频: 2 - 3 - Cost Function - Intuition I
2.4 代价函数的直观理解II
参考视频: 2 - 4 - Cost Function - Intuition II
2.5 梯度下降
参考视频: 2 - 5 - Gradient Descent
梯度下降是一个用来求函数最小值的算法,我们使用梯度下降算法来求代价函数 J ( θ 0 , θ 1 ) J(\theta_{0}, \theta_{1}) J(θ0,θ1) 的最小值。
梯度下降思想:开始时随机选择一个参数组合
(
θ
0
,
θ
1
,
.
.
.
.
.
.
,
θ
n
)
\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right)
(θ0,θ1,......,θn),计算代价函数,然后寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到找到一个局部最小值(local minimum),因为并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否是全局最小值(global minimum)。选择不同的初始参数组合,可能会找到不同的局部最小值。
想象你站在山的这一最高点上,在梯度下降算法中,我们要做的就是旋转360度,观察我们的周围,问自己要在某个方向上,用小碎步尽快下山,那么小碎步需要朝什么方向?看一下周围,你会发现最佳的下山方向,再看看周围,再一次想想,应该从什么方向迈着小碎步下山?然后按自己的判断又迈出一步,重复上面步骤,直到你接近局部最低点的位置。
批量梯度下降(batch gradient descent)算法的公式为:
其中
a
a
a是学习率(learning rate),决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。
在梯度下降算法中,梯度下降中,要更新
θ
0
{\theta_{0}}
θ0和
θ
1
{\theta_{1}}
θ1 ,当
j
=
0
j=0
j=0 和
j
=
1
j=1
j=1时,会产生更新,所以你将更新
J
(
θ
0
)
J\left( {\theta_{0}} \right)
J(θ0)和
J
(
θ
1
)
J\left( {\theta_{1}} \right)
J(θ1)。实现梯度下降算法的微妙之处是,如果要更新这个等式,就要同时更新
θ
0
{\theta_{0}}
θ0和
θ
1
{\theta_{1}}
θ1,要这样更新:
θ 0 {\theta_{0}} θ0:= θ 0 {\theta_{0}} θ0 ,并更新 θ 1 {\theta_{1}} θ1:= θ 1 {\theta_{1}} θ1。
实现方法是:计算公式右边的部分,通过那一部分计算出 θ 0 {\theta_{0}} θ0和 θ 1 {\theta_{1}} θ1的值,然后同时更新 θ 0 {\theta_{0}} θ0和 θ 1 {\theta_{1}} θ1。
2.6 梯度下降的直观理解
参考视频: 2 - 6 - Gradient Descent Intuition
梯度下降算法如下:
θ j : = θ j − α ∂ ∂ θ j J ( θ ) {\theta_{j}}:={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J\left(\theta \right) θj:=θj−α∂θj∂J(θ)
描述:对
θ
\theta
θ赋值,使得
J
(
θ
)
J\left( \theta \right)
J(θ)按梯度下降最快方向进行,一直迭代下去,最终得到局部最小值。其中
a
a
a是学习率(learning rate),它决定我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
对于这个问题,求导,即取这个红点的切线,与函数相切于这一点,让我们看看这条红色直线的斜率,正好是三角形的高度除以这个水平长度。这条线有一个正斜率,也就是说它有正导数,因此,得到的新的
θ
1
{\theta_{1}}
θ1,
θ
1
{\theta_{1}}
θ1更新后等于
θ
1
{\theta_{1}}
θ1减去一个正数乘以
a
a
a。
这就是我梯度下降法的更新规则: θ j : = θ j − α ∂ ∂ θ j J ( θ ) {\theta_{j}}:={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J\left( \theta \right) θj:=θj−α∂θj∂J(θ)
如果
a
a
a太小或
a
a
a太大会出现什么情况:
如果
a
a
a太小了,学习速率太小,结果只能像小宝宝一样一点点地挪动,去努力接近最低点,这就需要很多步才能到达最低点,所以如果
a
a
a太小的话,可能会很慢,它会需要很多步才能到达全局最低点。
如果
a
a
a太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果
a
a
a太大,它会导致无法收敛,甚至发散。
如果我们预先把
θ
1
{\theta_{1}}
θ1放在一个局部的最低点,下一步梯度下降法会怎样工作?
假设你将
θ
1
{\theta_{1}}
θ1初始化在局部最低点,它已经在一个局部的最优处或局部最低点。结果是局部最优点的导数将等于零,因为它是那条切线的斜率,它使得
θ
1
{\theta_{1}}
θ1不再改变,也就是新的
θ
1
{\theta_{1}}
θ1等于原来的
θ
1
{\theta_{1}}
θ1,因此,梯度下降法更新什么都没做,不会改变参数的值。这也解释了为什么即使学习速率
a
a
a保持不变时,梯度下降也可以收敛到局部最低点。
我们来看一个例子,这是代价函数
J
(
θ
)
J\left( \theta \right)
J(θ)。
想找到它的最小值,首先初始化梯度下降算法,在品红点初始化,如果更新一步梯度下降,也许它会带我到这个绿点,因为这个点的导数相当陡的。在绿点,如果再更新一步,会发现导数,也即斜率,是没那么陡的。随着接近最低点,我的导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点。然后我想再梯度下降一步,在这个绿点,我自然会用一个稍微跟刚才在那个品红点时比,再小一点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所以,我再进行一步梯度下降时,我的导数项是更小的,
θ
1
{\theta_{1}}
θ1更新的幅度就会更小。所以随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现,已经收敛到局部极小值。
所以,梯度下降法中,当接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小
a
a
a。
这就是梯度下降算法,你可以用它来最小化任何代价函数 J J J,不只是线性回归中的代价函数 J J J。
2.7 梯度下降的线性回归
参考视频: 2 - 7 - GradientDescentForLinearRegression
梯度下降算法和线性回归算法比较如图:
线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即:
则算法改写成:
上面的算法,也称为批量梯度下降。批量梯度下降”,指的是在梯度下降的每一步中,都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都需要对所有
m
m
m个训练样本求和。因此,这里需要考虑所有这一"批"训练样本。而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。
线性代数里有一种计算代价函数
J
J
J最小值的数值解法,不需要梯度下降这种迭代算法,它可以在不需要多步梯度下降的情况下,也能解出代价函数
J
J
J的最小值,这是另一种称为正规方程(normal equations)的方法。不过,在数据量较大的情况下,梯度下降法比正规方程要更适用一些。
在下一段视频中,告诉你泛化的梯度下降算法,这将使梯度下降更加强大。
2.8 接下来的内容
参考视频: 2 - 8 - What_'s Next
三、线性代数回顾(Linear Algebra Review)
3.1 矩阵和向量
参考视频: 3 - 1 - Matrices and Vectors
左图为1索引向量,右图为0索引向量,一般我们用1索引向量。
3.2 加法和标量乘法
参考视频: 3 - 2 - Addition and Scalar Multiplication
3.3 矩阵向量乘法
参考视频: 3 - 3 - Matrix Vector Multiplication
3.4 矩阵乘法
参考视频: 3 - 4 - Matrix Matrix Multiplication
3.5 矩阵乘法的性质
参考视频: 3 - 5 - Matrix Multiplication Properties
矩阵乘法的性质:
矩阵的乘法不满足交换律:
A
×
B
≠
B
×
A
A×B≠B×A
A×B̸=B×A
矩阵的乘法满足结合律。即:
A
×
(
B
×
C
)
=
(
A
×
B
)
×
C
A×(B×C)=(A×B)×C
A×(B×C)=(A×B)×C
单位矩阵:在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们称这种矩阵为单位矩阵.它是个方阵,一般用
I
I
I 或者
E
E
E 表示,本讲义都用
I
I
I 代表单位矩阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1以外全都为0。如:
A
A
−
1
=
A
−
1
A
=
I
A{{A}^{-1}}={{A}^{-1}}A=I
AA−1=A−1A=I
对于单位矩阵,有
A
I
=
I
A
=
A
AI=IA=A
AI=IA=A
3.6 逆、转置
参考视频: 3 - 6 - Inverse and Transpose
矩阵的逆:如矩阵
A
A
A是一个
m
×
m
m×m
m×m矩阵(方阵),如果有逆矩阵,则:
A
A
−
1
=
A
−
1
A
=
I
A{{A}^{-1}}={{A}^{-1}}A=I
AA−1=A−1A=I
矩阵的转置:设
A
A
A为
m
×
n
m×n
m×n阶矩阵(即
m
m
m行
n
n
n列),第
i
i
i行
j
j
j列的元素是
a
(
i
,
j
)
a(i,j)
a(i,j),即:
A
=
a
(
i
,
j
)
A=a(i,j)
A=a(i,j)
定义
A
A
A的转置为这样一个
n
×
m
n×m
n×m阶矩阵
B
B
B,满足
B
=
a
(
j
,
i
)
B=a(j,i)
B=a(j,i),即
b
(
i
,
j
)
=
a
(
j
,
i
)
b (i,j)=a(j,i)
b(i,j)=a(j,i)(
B
B
B的第
i
i
i行第
j
j
j列元素是
A
A
A的第
j
j
j行第
i
i
i列元素),记
A
T
=
B
{{A}^{T}}=B
AT=B。
直观来看,将
A
A
A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到
A
A
A的转置。
例:
矩阵的转置基本性质:
(
A
±
B
)
T
=
A
T
±
B
T
{{\left( A\pm B \right)}^{T}}={{A}^{T}}\pm {{B}^{T}}
(A±B)T=AT±BT
(
A
×
B
)
T
=
B
T
×
A
T
{{\left( A\times B \right)}^{T}}={{B}^{T}}\times {{A}^{T}}
(A×B)T=BT×AT
(
A
T
)
T
=
A
{{\left( {{A}^{T}} \right)}^{T}}=A
(AT)T=A
(
K
A
)
T
=
K
A
T
{{\left( KA \right)}^{T}}=K{{A}^{T}}
(KA)T=KAT
第 j j j行第 i i i列元素),记 A T = B {{A}^{T}}=B AT=B。