机器学习入门课程学习笔记(斯坦福吴恩达)
文章目录
- 一、简介
- 二、 模型和代价函数(Model and Cost Function)
- 三、线性代数
- 3.1 矩阵和向量
- 3.2 矩阵的加法和标量乘法(Addition and Scalar Multiplication)
- 3.2 矩阵与向量相乘(Matrix-vector Multiplication)
- 3.3 矩阵与矩阵相乘(Matrix-matrix Multiplication)
- 3.4 矩阵乘法的性质(Matrix Multiplication Properties)
- 3.5 矩阵的逆和转置(Inverse and Transpose)
- 四、多元线性回归(Multivariate Linear Regression)
- 4.1 多个特征(Multiple features)
- 4.2 多元线性回归中的梯度下降
- 4.3 梯度下降实战-特征缩放(Feature Scaling)
- 4.4 梯度下降实战-学习率(Learning Rate)
- 4.5 特征和多项式回归(Features and Polynomial Regression)
- 4.6 正规方程(Normal Equation)
- 4.7 正规方程不可逆(Normal Equation Noninvertibility)
- 五、Octave教程
- 六、逻辑回归
- 6.1 分类问题(Classification)
- 6.2 Hypothesis Representation
- 6.3 决策边界(Decision Boundary)
- 6.4 逻辑回归的代价函数
- 6.5 简化代价函数和梯度下降(Simplified Cost Function and Gradient Descent )
- 6.6 高级优化(Advanced Optimization)
- 6.7 多分类问题:一对多(Multiclass Classification: One-vs-all)
- 七、解决过拟合问题
- 7.1 过拟合问题
- 7.2 包含正则化的代价函数
- 7.3 正则化的线性回归(Regularized Linear Regression)
- 7.4 正则化的逻辑回归(Regularized Logistic Regression)
- 八、神经网络(Neural Networks)
- 8.1 非线性假设(Non-linear Hypotheses)
- 8.2 神经和大脑(Neurons and the Brain)
- 8.3 模型表示(Model Representation)
- 8.4 样例1(Examples and Intuitions)
- 8.5 多分类问题(Multiclass Classification)
- 九、神经网络(二)
一、简介
1.1 什么机器学习
机器学习的定义:一个计算机程序可从经验E(Experience)中学习如何完成任务T(Task),并且随着经验E的增加,性能指标P (performance measure)会不断提高
机器学习的分类:
- 监督学习(Supervised Learning):给定一个数据集,该数据集包含输出结果(标签),程序通过学习,来给输入数据打标签。例如:喂给程序n张动物图片,并且告知它每张图片是什么动物,程序经过学习后,喂给程序一张未打标签的图片,让程序判断这是什么动物
- 非监督学习(Unsupervised Learning):与监督学习正好相反。给定一个数据集,但不给出每个数据集的输出,让程序自己去给数据集进行分类。例如:给定一组基因数据,根据给定的变量(如寿命,地理位置等),自动将其进行分组。
1.2 监督学习(Supervised Learning)
给定一个数据集,该数据集包含输出结果(标签),程序通过学习,来给输入数据打标签。例如:喂给程序n张动物图片,并且告知它每张图片是什么动物,程序经过学习后,喂给程序一张未打标签的图片,让程序判断这是什么动物
监督学习问题的分类:
- 分类问题(Classification Problem):预测的结果是离散值。例如:要预测一张动物照片属于猫、狗或其它等。
- 回归问题(Regression Problem):预测的结果是连续值。例如:预测房屋的价格,结果可以是10000,10001, ...
1.3 非监督学习(Unsupervised Learning)
给定一个数据集,但是并不会告诉机器“每个数据集是什么”,然后让机器自己去对这个数据集进行分类。比如给定一组衣服尺寸数据,通过机器学习,将衣服分成“大”、“中”、“小”三类,训练好模型后,再给定一个衣服尺寸数据,机器就可以识别出这是大号还是中号或小号。
二、 模型和代价函数(Model and Cost Function)
2.1 模型描述(Model Representation)
:训练数据集的样本数量 :第 个样本的输入(特征) : 第 个样本的输出(目标值) :第 个样本 :要训练的参数 或 :训练出的模型(函数)
2.2 代价函数(Cost Function)
代价函数是用来描述“当前模型预测的精确程度”,一般来说,代价函数的值越大,预测的值越不精准,所以,我们优化模型的其中一个目标就是使代价函数尽可能的小
代价函数表示方法不唯一,通常使用以下表示方法:
公式解释:
:代价函数,其中 为当前的模型参数。目标就是不断优化参数 来使代价函数的值变小 : 为预测的值, 为实际值。使用预测的值减去实际值,来求得误差值。加平方有两个原因:①消除负号 ②方便求导(如果使用绝对值会不方便求导) : 除以 是为了求平均。除以2为了方便求导,因为求导后,2次方会正好把这个2消掉
2.3 梯度下降(Gradient Descent)
梯度下降是用来找出当
核心思想:对
梯度下降算法伪代码:
解释:
:=
:赋值操作。在其他语言中,一般使用=
,而非:=
- repeat until convergence:重复直到收敛为止。不断重复括号里的操作,直到
收敛于某一值,也就是 趋近于0 : 为一指定常数,称为学习率(learning rate)。每次 向 减小的方向移动一点 : 为 的下标,在该例中,有两个需要学习的参数,所以需要对 和 都做上面这个操作
需要注意:
和 要同时更新,他们都更新后才能进入下一轮循环。
学习率
-
学习率太小:如果学习率太小,每次移动的就会太少。要找出最低点,就会需要循环更多次。
-
学习率太大:如果学习率太大,每次移动的步长太大,可能会导致无法收敛,甚至可能会发散。
三、线性代数
3.1 矩阵和向量
矩阵(Matrix):矩形的一组数字类型的数组,一般用大写字母表示。例如:
矩阵的维度(Dimension of matrix):矩阵是一个二维数组,维度用
矩阵的元素(Matrix Elements ( entries of matrix )):
向量(Vector):一个
向量的元素:
3.2 矩阵的加法和标量乘法(Addition and Scalar Multiplication)
矩阵的加法(Matrix Addition):两个矩阵相加得到一个新的矩阵。做法为对应元素相加,要求两个矩阵维度必须一样,要不然没法对应元素相加。例如:
标量乘法(Scalar Multiplication): 矩阵乘以一个数得到一个新的矩阵,做法为每个元素都乘以该数。例如:
3.2 矩阵与向量相乘(Matrix-vector Multiplication)
矩阵与向量相乘(Matrix-vector Multiplication):矩阵乘以向量然后得到一个新的向量,做法为矩阵的每一个行的元素与向量元素对应相乘再相加。要求矩阵列的维度要和向量维度一致。例如:
3.3 矩阵与矩阵相乘(Matrix-matrix Multiplication)
矩阵与矩阵相乘(Matrix-matrix Multiplication):两个矩阵相乘得到一个新的矩阵,做法为第1个矩阵的
3.4 矩阵乘法的性质(Matrix Multiplication Properties)
的矩阵称为方阵(square matrix)-
对角线全为1,其余全为0的方阵称为单位矩阵(identity matrix),记作
或 。 例如: -
3.5 矩阵的逆和转置(Inverse and Transpose)
逆矩阵(inverse matrix):如果一个矩阵
逆矩阵的性质:
- 只有方阵才有逆矩阵,且与逆矩阵维度相同
- 不是所有矩阵都有逆矩阵
转置矩阵(transposed matrix):如果一个
四、多元线性回归(Multivariate Linear Regression)
4.1 多个特征(Multiple features)
多元线性回归:有多个特征的线性回归问题
符号(Notation):
:表示特征的数量 :第 个样本的输入 :第 个样本的第 个特征的值
多元线性回归方程:
为了方便向量化,一般定义
则,线性回归方程为:
4.2 多元线性回归中的梯度下降
假设(Hypothesis):
参数(Parameters):
代价函数(Cost function):
梯度下降:
4.3 梯度下降实战-特征缩放(Feature Scaling)
问题提出: 若特征的量纲不一致,那么在进行梯度下降的时候,在量纲大的方向上下降过多,而在量纲小的方向下降过少。例如:
= 房屋面积 (0 - 2000 m^2^) = 房间数量 (0-5)
那么在进行梯度下降时,就会产生一个特别椭的椭圆。
特征缩放(feature scaling):让每一个特征都缩放到
特征缩放常用方法(参考资料):
- 均值归一化(Mean Normalization) :使用
替换 ,使特征的均值约等于0。公式为: 其中, 为 对应特征的平均值,S为特征的范围之差(max-min),S也可以使用标准差。
4.4 梯度下降实战-学习率(Learning Rate)
随着梯度下降迭代次数的增多,
梯度下降的收敛:一般认为,当
学习率
太小 : 收敛的太慢 太大 :可能会导致不收敛,甚至发散。即每次 不减反增
学习率
4.5 特征和多项式回归(Features and Polynomial Regression)
由于预测的模型不一定是直线
多项式回归:对一个特征,定义回归方程时,包含特征的高次方。
对于多项式回归方程,处理方式为将x的高次方当成其他特征进行处理即可:
除了定义高次方外,也可以定义其他次方,例如
4.6 正规方程(Normal Equation)
多元线性回归的正规方程解:不使用梯度下降法,而是通过数学公式,直接计算出
设有
则,使得
时间复杂度:O(n^3^) ,n为特征数
梯度下降法与正规方程法的比较:
梯度下降法 | 正规方程法 |
---|---|
需要考虑学习率 |
不需要选择学习率 |
需要多次迭代 | 需需要迭代 |
适用于特征比较多的场景,即 n 比较大 | 不适用与特征多的场景 |
4.7 正规方程不可逆(Normal Equation Noninvertibility)
在使用正规方程求解
主要有以下情况:
1.当特征中存在成比例的特征,则会导致不可逆(会导致
= 房屋面积(m^2^) = 房屋面积 (亩)
解决方案:只保留一个
2.特征太多了,导致
解决方案:删除部分特征,或使用正则化(regularization)
五、Octave教程
略,现在不用学这个了,直接用Numpy不香么
六、逻辑回归
6.1 分类问题(Classification)
二分类问题:分类结果只包含两种类别,使用
只使用线性回归处理的弊端:
根据数据,得出以下模型:
- 如果
,预测 - 如果
,预测
但如果再增加一些极端的点,获得的模型就会如同下面蓝色线,这个模型显然不够好。
而且,线性回归的
而逻辑回归满足:
6.2 Hypothesis Representation
逻辑回归是处理二分类问题的
它需要使
逻辑回归模型的假设公式为:
6.3 决策边界(Decision Boundary)
决策边界(Decision Boundary):将数据分成两个类比的边界线。
例如,我们经过训练得到了一条决策边界:
- 当样本
时, , 预测为红X - 当样本
时, ,预测为蓝〇
样例2,非线性的决策边界:
- 当
时, , 预测为红X - 当
时, , 预测为蓝〇
6.4 逻辑回归的代价函数
逻辑回归的代价函数部分公式如下:
6.5 简化代价函数和梯度下降(Simplified Cost Function and Gradient Descent )
梯度下降的代价函数部分公式如下:
将其合并为一个式子为:
完整的线性回归代价函数公式如下:
对应的梯度下降公式为(详细推导公式):
向量化的实现为(向量化过程):
6.6 高级优化(Advanced Optimization)
除梯度下降法之外,其他使
- 共轭梯度(Conjugate gradient)
- BFGS
- L-BFGS
上述算法的优点:
- 不需要手动选择学习率
- 比梯度下降快
上述算法的缺点:
- 实现复杂
6.7 多分类问题:一对多(Multiclass Classification: One-vs-all)
对于多分类问题,只需要将每个类别分别进行一对多处理即可
为每一个类别
例如,有如下三个类别
- 首先,将
X
和口
,看成一个类别,得到
2. 然后,将 △
和 X
看成一个类别,得到
3. 最后,将 △
和 口
看成一个类别,得到
七、解决过拟合问题
7.1 过拟合问题
过拟合(Overfitting):如果我们特征太多(特征的高次方太多),那样学习的假设函数就可以非常好的拟合,但是却不能很好的进行泛化(预测新的输入)
Overfitting:If we have too many features, the learned hypothesis may fit the training set very well (
过拟合:
- 拟合的太好,不能很好泛化
- 高方差,低偏差
欠拟合:
- 拟合的不够好
- 低方差,高偏差
例如,我们有一个预测房价的模型:
可以看出,这个假设刚刚好
如果假设为直线,就会出现欠拟合(underfit) 问题,它会有较高的偏差(高偏差(High Bias)):
如果假设函数的特征太多,拟合的太好了,反而不好,称为过拟合(overfit),它会有较高的方差(高方差(High Variance)):
理解高偏差和高方差
逻辑回归的欠拟合和过拟合样例:
过拟合的处理:
- 减少特征的数量:①手动选择保留哪些特征 ②使用模型选择算法(Model selection algorithm)
- 正则化(Regularization):①保留所有特征,但是减少参数
的量级(magnitude); 当特征比较多时,该方法就比较好了,因为每一个特征都为预测 贡献了自己的一点力量
7.2 包含正则化的代价函数
正则化(Regularization)的目的:
- 防止过拟合
- 简化假设模型(“Simpler” hypothesis)
正则化的实现思路:为每个一
正则化的代价函数公式:
其中
注意:正则化是从
开始,因为 是截距,不用参与正则化
7.3 正则化的线性回归(Regularized Linear Regression)
正则化的代价函数公式:
无正则化的梯度下降公式:
正则化后的梯度下降公式:
整理后得:
要保证
< 1,这样才能起到惩罚的作用,每次让 减少的更多一点
无正则化的线性回归正规方程解:
正则化后的线性回归正规方程解:
7.4 正则化的逻辑回归(Regularized Logistic Regression)
正则化后的逻辑回归的代价函数为:
无正则化的逻辑回归的梯度下降公式:
正则化后的逻辑回归的梯度下降公式:
八、神经网络(Neural Networks)
8.1 非线性假设(Non-linear Hypotheses)
线性假设的弊端:特征太多了
假设现在预测房价模型:
使用逻辑回归模型,假设函数为右侧。我们有两个特征
如果有100个特征,次方弄到2,那么最终的模型特征数量就总共有5150个特征,分别是
如果有100个特征,次方弄到3,最终会约有17w个模型特征。
所以,要提出非线性的模型假设
8.2 神经和大脑(Neurons and the Brain)
科普,可略
8.3 模型表示(Model Representation)
Dendrite(树突): 从树突输入数据
Nucleus(细胞核):由细胞核处理数据
Axon(轴突):通过轴突输出处理结果,或将处理结果反馈到下一层继续处理
神经网是以上述为思路构建的。
神经元模型(Neuron Model):
: 输入的特征值。 上面还有一个 ,称为偏置单元(Bias Unit),恒等于1。- 激活函数(activation function):橙色的圈为激活函数,一般选用Sigmoid函数
:模型的输出- 权重(weight):
到激活函数
之间的那条线,也就是 ,在神经网络中,称为权重(weight)
神经网络可以有多层,分别为:
- 输入层(Input Layer):Layer 1,数据从该层输入
- 隐藏层(Hidden Layer):Layer 2 到 Layer L-1,(L为层数),在第二层到最后一层之间的层称为隐藏层。隐藏层的每一个结点都是一个激活函数
- 输出层(Output Layer):Layer L,最后一层,该层得到的结果为输出结果
符号表示:
: 在第 层的第 个激活单元 :控制从 层 到 层函数映射的矩阵的权重矩阵。 的维数:如果神经网络的 层有 个单元(units), 层有 个单元,那么 是 维的 :第 层,第 个结点的第 个权重的值
神经网络的向量化:
则有:
例如,对于上面的神经网络,有:
将其向量化,可以表示为如下:
第三层为:
8.4 样例1(Examples and Intuitions)
假设,我们要构建模型来预测
我们可以构架纳入下神经网络:
通过机器学习,我们得到了
将
可以看出,我们预测的模型是正确的,可以满足一开始的预期
同理,也可以构建 OR Function 的神经网络模型,如下:
8.5 多分类问题(Multiclass Classification)
上述例子为二分类问题,这样输出
如果是一对多问题,例如:
我们需要将图片分成如下4个类别,则相应神经网络的输出结点应该是4个:
九、神经网络(二)
9.1 代价函数
数学符号表示, 例如有这样一个神经网络:
神经网络的层数。在上图中 层的结点个数(不计算偏置节点(bias unit))。上图中, = 多分类问题的类别数量。输出维度为 。如果是二分类问题,结果为0,1,此时
逻辑回归的代价函数如下:
神经网络的代价函数如下:
注意:
分别是 和 ,而不是 和
公式解释:
- 上半部分和逻辑回归类似,但不一样的地方在
。在逻辑回归的二分类中, ,其中 计算 的部分, 计算 的部分。而在多分类问题, , 也就是有K个 ,这样在计算代价函数时,要把这 种结果求和 - 下半部分是参数正则化。对于逻辑回归,只有
个 需要进行正则化。但在神经网络中就多了,因为有 层,所以需要遍历 到 层(最后一层为输出层,所以就没有线( )了),所以就有了 。 对于 层,因为有 个结点(不算偏置结点),所以就有了 。 而 层的每一个结点都要与它的下一层( 层)结点连条线(每条线代表一个 权重),所以就有了
9.2 反向传播算法(Backpropagation Algorithm)
反向传播算法的用途:计算出
与其他算法一致,我们得到了代价函数
所以需要编码来计算:
正向传播算法的用途:给定权重
正向传播算法思路:从输入层开始,一层一层计算,最终得出输出结果
例如,对于该神经网络,使用正向传播算法计算
以
反向传播算法思路:
例如,对于该神经网络,首先,令:
层结点 的“误差(error)” ,其中n代表该层的结点数
则有:
其中
反向传播算法伪代码:
最终得:
9.5 梯度检测
梯度检测:检测自己的梯度下降代码写的是否正确
思想:求出该点斜率(导数)的近似值,然后与实际值比较,如果差的多,说明求导公式有问题。
对于某一个
其中
对于 向量
9.6 随机初始化
对于
- 不能将
初始化为0 - 建议将每一个
初始化为范围在 中的随机数
9.7 神经网路总结
训练一各神经网络分为以下几步:
1. 随机初始化权重(