From aab1bf7da28c5c9b1a5d14f75fe573d105cee180 Mon Sep 17 00:00:00 2001 From: scruel Date: Sun, 18 Sep 2022 15:04:38 +0800 Subject: [PATCH] Format optimize: remove TOC & use chinese brackets --- week1.md | 72 +++++++++++++++++++++++++-------------------------- week10.md | 2 -- week11.md | 2 -- week2.md | 28 ++++++++++---------- week3.md | 89 ++++++++++++++++++++++++++++++--------------------------------- week4.md | 46 ++++++++++++++++----------------- week5.md | 40 ++++++++++++++-------------- week6.md | 6 ++--- week7.md | 2 -- week8.md | 2 -- week9.md | 2 -- 11 files changed, 134 insertions(+), 157 deletions(-) diff --git a/week1.md b/week1.md index b7fb0f8..1d4bc72 100644 --- a/week1.md +++ b/week1.md @@ -1,6 +1,4 @@ -[TOC] - -# 1. 引言(Introduction) +# 1. 引言(Introduction) ## 1.1 Welcome @@ -18,7 +16,7 @@ - 数据挖掘 - 网页点击流数据分析 -- 人工无法处理的工作(量大) +- 人工无法处理的工作(量大) - 手写识别 - 计算机视觉 - 个人定制 @@ -26,7 +24,7 @@ - 研究大脑 - …… -## 1.2 什么是机器学习(What is Machine Learning) +## 1.2 什么是机器学习(What is Machine Learning) 1. 机器学习定义 这里主要有两种定义: @@ -59,12 +57,12 @@ - 迁移学习 -## 1.3 监督学习(Supervised Learning) +## 1.3 监督学习(Supervised Learning) 监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入**和对应的结果**即训练集,建模拟合,最后让计算机预测未知数据的结果。 监督学习一般有两种: -1. 回归问题(Regression) +1. 回归问题(Regression) 回归问题即为预测一系列的**连续值**。 @@ -72,7 +70,7 @@ ![](images/20180105_194712.png) -2. 分类问题(Classification) +2. 分类问题(Classification) 分类问题即为预测一系列的**离散值**。 @@ -82,21 +80,21 @@ ![](images/20180105_194839.png) -视频中提到**支持向量机**这个算法,旨在解决当特征量很大的时候(特征即如癌症例子中的肿块大小,颜色,气味等各种特征),计算机内存一定会不够用的情况。**支持向量机能让计算机处理无限多个特征。** +视频中提到**支持向量机**这个算法,旨在解决当特征量很大的时候(特征即如癌症例子中的肿块大小,颜色,气味等各种特征),计算机内存一定会不够用的情况。**支持向量机能让计算机处理无限多个特征。** -## 1.4 无监督学习(Unsupervised Learning) +## 1.4 无监督学习(Unsupervised Learning) 相对于监督学习,训练集不会有人为标注的结果(无反馈),我们**不会给出**结果或**无法得知**训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。 无监督学习一般分为两种: -1. 聚类(Clustering) +1. 聚类(Clustering) - 新闻聚合 - DNA 个体聚类 - 天文数据分析 - 市场细分 - 社交网络分析 -2. 非聚类(Non-clustering) +2. 非聚类(Non-clustering) - 鸡尾酒问题 **新闻聚合** @@ -123,9 +121,9 @@ > > 机器学习领域发展迅速,现在也可使用 Tensorflow 等开源机器学习框架编写机器学习代码,这些框架十分友好,易于编写及应用。 -# 2 单变量线性回归(Linear Regression with One Variable) +# 2 单变量线性回归(Linear Regression with One Variable) -## 2.1 模型表示(Model Representation) +## 2.1 模型表示(Model Representation) 1. 房价预测训练集 | Size in $feet^2$ ($x$) | Price (\$) in 1000's($y$) | @@ -142,25 +140,25 @@ ![](images/20180105_212048.png) -其中 $h$ 代表结果函数,也称为**假设(hypothesis)** 。假设函数根据输入(房屋的面积),给出预测结果输出(房屋的价格),即是一个 $X\to Y$ 的映射。 +其中 $h$ 代表结果函数,也称为**假设(hypothesis)** 。假设函数根据输入(房屋的面积),给出预测结果输出(房屋的价格),即是一个 $X\to Y$ 的映射。 $h_\theta(x)=\theta_0+\theta_1x$,为解决房价问题的一种可行表达式。 > $x$: 特征/输入变量。 -上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测时的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。 +上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测时的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。 -单变量,即只有一个特征(如例子中房屋的面积这个特征)。 +单变量,即只有一个特征(如例子中房屋的面积这个特征)。 -## 2.2 代价函数(Cost Function) +## 2.2 代价函数(Cost Function) > 李航《统计学习方法》一书中,损失函数与代价函数两者为**同一概念**,未作细分区别,全书没有和《深度学习》一书一样混用,而是统一使用**损失函数**来指代这类类似概念。 > -> 吴恩达(Andrew Ng)老师在其公开课中对两者做了细分。**如果要听他的课做作业,不细分这两个概念是会被打小手扣分的**!这也可能是因为老师发现了业内混用的乱象,想要治一治吧。 +> 吴恩达(Andrew Ng)老师在其公开课中对两者做了细分。**如果要听他的课做作业,不细分这两个概念是会被打小手扣分的**!这也可能是因为老师发现了业内混用的乱象,想要治一治吧。 > -> **损失函数**(Loss/Error Function): 计算**单个**样本的误差。[link](https://www.coursera.org/learn/neural-networks-deep-learning/lecture/yWaRd/logistic-regression-cost-function) +> **损失函数**(Loss/Error Function): 计算**单个**样本的误差。[link](https://www.coursera.org/learn/neural-networks-deep-learning/lecture/yWaRd/logistic-regression-cost-function) > -> **代价函数**(Cost Function): 计算整个训练集**所有损失函数之和的平均值** +> **代价函数**(Cost Function): 计算整个训练集**所有损失函数之和的平均值** > > > @@ -184,7 +182,7 @@ $h_\theta(x)=\theta_0+\theta_1x$,为解决房价问题的一种可行表达式 上图展示了当 $\theta$ 取不同值时,$h_\theta\left(x\right)$ 对数据集的拟合情况,蓝色虚线部分代表**建模误差**(预测结果与实际结果之间的误差),我们的目标就是最小化所有误差之和。 -为了求解最小值,引入代价函数(Cost Function)概念,用于度量建模误差。考虑到要计算最小值,应用二次函数对求和式建模,即应用统计学中的平方损失函数(最小二乘法): +为了求解最小值,引入代价函数(Cost Function)概念,用于度量建模误差。考虑到要计算最小值,应用二次函数对求和式建模,即应用统计学中的平方损失函数(最小二乘法): $$J(\theta_0,\theta_1)=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(\hat{y}_{i}-y_{i} \right)^2=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(h_\theta(x_{i})-y_{i}\right)^2$$ @@ -194,14 +192,14 @@ $$J(\theta_0,\theta_1)=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(\hat{y}_{i}-y 讨论到这里,我们的问题就转化成了**求解 $J\left( \theta_0, \theta_1 \right)$ 的最小值**。 -## 2.3 代价函数 - 直观理解1(Cost Function - Intuition I) +## 2.3 代价函数 - 直观理解1(Cost Function - Intuition I) 根据上节视频,列出如下定义: -- 假设函数(Hypothesis): $h_\theta(x)=\theta_0+\theta_1x$ -- 参数(Parameters): $\theta_0, \theta_1$ -- 代价函数(Cost Function): $J\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}}$ -- 目标(Goal): $\underset{\theta_0, \theta_1}{\text{minimize}} J \left(\theta_0, \theta_1 \right)$ +- 假设函数(Hypothesis): $h_\theta(x)=\theta_0+\theta_1x$ +- 参数(Parameters): $\theta_0, \theta_1$ +- 代价函数(Cost Function): $J\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}}$ +- 目标(Goal): $\underset{\theta_0, \theta_1}{\text{minimize}} J \left(\theta_0, \theta_1 \right)$ 为了直观理解代价函数到底是在做什么,先假设 $\theta_1 = 0$,并假设训练集有三个数据,分别为$\left(1, 1\right), \left(2, 2\right), \left(3, 3\right)$,这样在平面坐标系中绘制出 $h_\theta\left(x\right)$ ,并分析 $J\left(\theta_0, \theta_1\right)$ 的变化。 @@ -209,7 +207,7 @@ $$J(\theta_0,\theta_1)=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(\hat{y}_{i}-y 右图 $J\left(\theta_0, \theta_1\right)$ 随着 $\theta_1$ 的变化而变化,可见**当 $\theta_1 = 1$ 时,$J\left(\theta_0, \theta_1 \right) = 0$,取得最小值,**对应于左图青色直线,即函数 $h$ 拟合程度最好的情况。 -## 2.4 代价函数 - 直观理解2(Cost Function - Intuition II) +## 2.4 代价函数 - 直观理解2(Cost Function - Intuition II) > 注:该部分由于涉及到了多变量成像,可能较难理解,要求只需要理解上节内容即可,该节如果不能较好理解可跳过。 @@ -221,7 +219,7 @@ $$J(\theta_0,\theta_1)=\dfrac{1}{2m}\displaystyle\sum_{i=1}^m\left(\hat{y}_{i}-y ![](images/20180106_090904.png) -由于3-D图形不便于标注,所以将3-D图形转换为**轮廓图(contour plot)**,下面用轮廓图(下图中的右图)来作直观理解,其中相同颜色的一个圈代表着同一高度(同一 $J\left(\theta\right)$ 值)。 +由于3-D图形不便于标注,所以将3-D图形转换为**轮廓图(contour plot)**,下面用轮廓图(下图中的右图)来作直观理解,其中相同颜色的一个圈代表着同一高度(同一 $J\left(\theta\right)$ 值)。 $\theta_0 = 360, \theta_1 =0$ 时: @@ -233,11 +231,11 @@ $\theta_0 = 360, \theta_1 =0$ 时: 上图中最中心的点(红点),近乎为图像中的最低点,也即代价函数的最小值,此时对应 $h_\theta\left(x\right)$ 对数据的拟合情况如左图所示,嗯,一看就拟合的很不错,预测应该比较精准啦。 -## 2.5 梯度下降(Gradient Descent) +## 2.5 梯度下降(Gradient Descent) -在特征量很大的情况下,即便是借用计算机来生成图像,人工的方法也很难读出 $J\left(\theta\right)$ 的最小值,并且大多数情况无法进行可视化,故引入**梯度下降(Gradient Descent)方法,让计算机自动找出最小化代价函数时对应的 $\theta$ 值。** +在特征量很大的情况下,即便是借用计算机来生成图像,人工的方法也很难读出 $J\left(\theta\right)$ 的最小值,并且大多数情况无法进行可视化,故引入**梯度下降(Gradient Descent)方法,让计算机自动找出最小化代价函数时对应的 $\theta$ 值。** -梯度下降背后的思想是:开始时,我们随机选择一个参数组合$\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right)$即起始点,计算代价函数,然后寻找下一个能使得代价函数下降最多的参数组合。不断迭代,直到找到一个**局部最小值(local minimum)**,由于下降的情况只考虑当前参数组合周围的情况,所以无法确定当前的局部最小值是否就是**全局最小值(global minimum)**,不同的初始参数组合,可能会产生不同的局部最小值。 +梯度下降背后的思想是:开始时,我们随机选择一个参数组合$\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right)$即起始点,计算代价函数,然后寻找下一个能使得代价函数下降最多的参数组合。不断迭代,直到找到一个**局部最小值(local minimum)**,由于下降的情况只考虑当前参数组合周围的情况,所以无法确定当前的局部最小值是否就是**全局最小值(global minimum)**,不同的初始参数组合,可能会产生不同的局部最小值。 下图根据不同的起始点,产生了两个不同的局部最小值。 @@ -260,7 +258,7 @@ $$ > > ”:=“: 赋值操作符 > -> $\alpha$: 学习速率(learning rate), $\alpha > 0$ +> $\alpha$: 学习速率(learning rate), $\alpha > 0$ > > $\frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$: $J\left( \theta_0, \theta_1 \right)$ 的偏导 @@ -270,7 +268,7 @@ $$ 注意,在计算时要**批量更新 $\theta$ 值**,即如上图中的左图所示,否则结果上会有所出入,原因不做细究。 -## 2.6 梯度下降直观理解(Gradient Descent Intuition) +## 2.6 梯度下降直观理解(Gradient Descent Intuition) 该节探讨 $\theta_1$ 的梯度下降更新过程,即 $\theta_1 := \theta_1 - \alpha\frac{d}{d\theta_1}J\left(\theta_1\right)$,此处为了数学定义上的精确性,用的是 $\frac{d}{d\theta_1}J\left(\theta_1\right)$,如果不熟悉微积分学,就把它视作之前的 $\frac{\partial}{\partial\theta}$ 即可。 @@ -306,7 +304,7 @@ $$ **最后,梯度下降不止可以用于线性回归中的代价函数,还通用于最小化其他的代价函数。** -## 2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression) +## 2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression) 线性回归模型 @@ -350,13 +348,13 @@ $$ $$ \frac{\partial}{\partial\theta_1} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} *x_1^{(i)} $$ -上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用**所有**的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。 +上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用**所有**的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。 由于线性回归函数呈现**碗状**,且**只有一个**全局的最优值,所以函数**一定总会**收敛到全局最小值(学习速率不可过大)。同时,函数 $J$ 被称为**凸二次函数**,而线性回归函数求解最小值问题属于**凸函数优化问题**。 ![](images/24e9420f16fdd758ccb7097788f879e7.png) -另外,使用循环求解,代码较为冗余,后面会讲到如何使用**向量化(Vectorization)**来简化代码并优化计算,使梯度下降运行的更快更好。 +另外,使用循环求解,代码较为冗余,后面会讲到如何使用**向量化(Vectorization)**来简化代码并优化计算,使梯度下降运行的更快更好。 # 3 Linear Algebra Review diff --git a/week10.md b/week10.md index c11bb58..8b70909 100644 --- a/week10.md +++ b/week10.md @@ -1,5 +1,3 @@ -[TOC] - # 17 Large Scale Machine Learning ## 17.1 Learning With Large Datasets diff --git a/week11.md b/week11.md index fb699c5..fdbd0ca 100644 --- a/week11.md +++ b/week11.md @@ -1,5 +1,3 @@ -[TOC] - # 18 Application Example: Photo OCR ## 18.1 Problem Description and Pipeline diff --git a/week2.md b/week2.md index 3d6734b..7f7b94a 100644 --- a/week2.md +++ b/week2.md @@ -1,8 +1,6 @@ -[TOC] +# 4 多变量线性回归(Linear Regression with Multiple Variables) -# 4 多变量线性回归(Linear Regression with Multiple Variables) - -## 4.1 多特征(Multiple Features) +## 4.1 多特征(Multiple Features) 对于一个要度量的对象,一般来说会有不同维度的多个特征。比如之前的房屋价格预测例子中,除了房屋的面积大小,可能还有房屋的年限、房屋的层数等等其他特征: @@ -38,7 +36,7 @@ $$ -## 4.2 多变量梯度下降(Gradient Descent for Multiple Variables) +## 4.2 多变量梯度下降(Gradient Descent for Multiple Variables) 多变量代价函数类似于单变量代价函数, @@ -83,14 +81,14 @@ $$ 当然,同单变量梯度下降一样,计算时需要**同时更新**所有参数。 -$h_\theta\left(x\right)= \theta^T x$,则得到同时更新参数的向量化(Vectorization)实现: +$h_\theta\left(x\right)= \theta^T x$,则得到同时更新参数的向量化(Vectorization)实现: $$ \theta = \theta - \alpha \frac{1}{m}(X^T(X\theta-y)) $$ > $X$: 训练集数据,$m\times(n+1)$ 维矩阵(包含基本特征 $x_0=1$) -## 4.3 梯度下降实践1-特征值缩放(Gradient Descent in Practice I - Feature Scaling) +## 4.3 梯度下降实践1-特征值缩放(Gradient Descent in Practice I - Feature Scaling) 在应用梯度下降算法实践时,由于各特征值的范围不一,可能会影响代价函数收敛速度。 @@ -104,7 +102,7 @@ $$ 为了优化梯度下降的收敛速度,采用特征缩放的技巧,使各特征值的**范围尽量一致**。 -除了以上图人工选择并除以一个参数的方式,**均值归一化(Mean normalization)**方法更为便捷,可采用它来对所有特征值统一缩放: +除了以上图人工选择并除以一个参数的方式,**均值归一化(Mean normalization)**方法更为便捷,可采用它来对所有特征值统一缩放: $x_i:=\frac{x_i-average(x)}{maximum(x)-minimum(x)}$, 使得 $x_i \in (-1,1)$ @@ -112,7 +110,7 @@ $$ 另外注意,一旦采用特征缩放,我们就需对所有的输入采用特征缩放,包括训练集、测试集、预测输入等。 -## 4.4 梯度下降实践2-学习速率(Gradient Descent in Practice II - Learning Rate) +## 4.4 梯度下降实践2-学习速率(Gradient Descent in Practice II - Learning Rate) 通常,有两种方法来确定函数是否收敛 @@ -136,11 +134,11 @@ $$ 通过不断改变 $\alpha$ 值,绘制并观察图像,并以此来确定合适的学习速率。 尝试时可取 $\alpha$ 如 $\dots\;0,001,\;0.003,\;0.01,\;0.03,\;0.1,\;\dots$ -## 4.5 特征和多项式回归(Features and Polynomial Regression) +## 4.5 特征和多项式回归(Features and Polynomial Regression) 在特征选取时,我们也可以自己归纳总结,定义一个新的特征,用来**取代或拆分**旧的一个或多个特征。比如,对于房屋面积特征来说,我们可以将其拆分为长度和宽度两个特征,反之,我们也可以合并长度和宽度这两个特征为面积这一个特征。 -线性回归只能以直线来对数据进行拟合,有时候需要使用**曲线**来对数据进行拟合,即**多项式回归(Polynomial Regression)**。 +线性回归只能以直线来对数据进行拟合,有时候需要使用**曲线**来对数据进行拟合,即**多项式回归(Polynomial Regression)**。 比如一个二次方模型:$h_{\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}$ @@ -152,7 +150,7 @@ $$ 在使用多项式回归时,要记住非常有必要进行特征缩放,比如 $x_1$ 的范围为 1-1000,那么 $x_1^2$ 的范围则为 1- 1000000,不适用特征缩放的话,范围更有不一致,也更易影响效率。 -## 4.6 正规方程(Normal Equation) +## 4.6 正规方程(Normal Equation) 对于一些线性回归问题来说,正规方程法给出了一个更好的解决问题的方式。 @@ -208,7 +206,7 @@ $$ -## 4.7 不可逆性正规方程(Normal Equation Noninvertibility) +## 4.7 不可逆性正规方程(Normal Equation Noninvertibility) (本部分内容为选讲) @@ -220,7 +218,7 @@ $$ 即 ${x_{1}}={x_{2}}*{{\left( 3.28 \right)}^{2}}$。 -- 特征数量大于训练集的数量$\left(m \leqslant n \right)$。 +- 特征数量大于训练集的数量 $\left(m \leqslant n \right)$。 如果发现 $X^TX$ 的结果不可逆,可尝试: @@ -246,7 +244,7 @@ $$ ## 5.5 Control Statements: for, while, if statement -## 5.6 向量化(Vectorization) +## 5.6 向量化(Vectorization) $$ \sum\limits_{j=0}^n\theta_jx_j=\theta^Tx diff --git a/week3.md b/week3.md index b6131ab..d89daea 100644 --- a/week3.md +++ b/week3.md @@ -1,10 +1,8 @@ -[TOC] +# 6 逻辑回归(Logistic Regression) -# 6 逻辑回归(Logistic Regression) +## 6.1 分类(Classification) -## 6.1 分类(Classification) - -在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。 +在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。 - 垃圾邮件判断 - 金融欺诈判断 @@ -14,7 +12,7 @@ ![](images/20180109_144040.png) -肿瘤诊断问题的目的是告诉病人**是否**为恶性肿瘤,是一个**二元分类问题(binary class problems)**,则定义 $ y \in\lbrace 0, 1\rbrace$,其中 0 表示**负向类(negative class)**,代表恶性肿瘤("-"),1 为**正向类(positive class)**,代表良性肿瘤("+")。如图,定义最右边的样本为**偏差项**。 +肿瘤诊断问题的目的是告诉病人**是否**为恶性肿瘤,是一个**二元分类问题(binary class problems)**,则定义 $ y \in\lbrace 0, 1\rbrace$,其中 0 表示**负向类(negative class)**,代表恶性肿瘤("-"),1 为**正向类(positive class)**,代表良性肿瘤("+")。如图,定义最右边的样本为**偏差项**。 在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定 @@ -22,25 +20,25 @@ $h_\theta(x) \geqslant 0.5$ ,预测为 $y = 1$,即正向类; $h_\theta(x) \lt 0.5$ ,预测为 $y = 0$,即负向类。 -即以 0.5 为**阈值**(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果 $y$。 +即以 0.5 为**阈值(threshold)**,则我们就可以根据线性回归结果,得到相对正确的分类结果 $y$。 接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。 -不仅如此,线性回归算法的值域为全体实数集($h_\theta(x) \in R$),则当线性回归函数给出诸如 $h_\theta(x) = 10000, h_\theta(x) = -10000$ 等很大/很小(负数)的数值时,结果 $y \in \lbrace 0, 1\rbrace$,这显得非常怪异。 +不仅如此,线性回归算法的值域为全体实数集($h_\theta(x) \in R$),则当线性回归函数给出诸如 $h_\theta(x) = 10000, h_\theta(x) = -10000$ 等很大/很小(负数)的数值时,结果 $y \in \lbrace 0, 1\rbrace$,这显得非常怪异。 区别于线性回归算法,逻辑回归算法是一个分类算法,**其输出值永远在 0 到 1 之间**,即 $h_\theta(x) \in (0,1)$。 -## 6.2 假设函数表示(Hypothesis Representation) +## 6.2 假设函数表示(Hypothesis Representation 为了使 $h_\theta(x) \in \left(0, 1\right)$,引入逻辑回归模型,定义假设函数 $$ h_\theta \left( x \right)=g(z)=g\left(\theta^{T}x \right) $$ -对比线性回归函数 $h_\theta \left( x \right)=\theta^{T}x$,$g$ 表示逻辑函数([logistic function][1]),复合起来,则称为逻辑回归函数。 +对比线性回归函数 $h_\theta \left( x \right)=\theta^{T}x$,$g$ 表示逻辑函数([logistic function][1]),复合起来,则称为逻辑回归函数。 逻辑函数是 S 形函数,会将所有实数映射到 $(0, 1)$ 范围。 @@ -50,7 +48,7 @@ $$ 应用 sigmoid 函数,则逻辑回归模型:$$h_{\theta}(x)=g(\theta^Tx) =\frac{1}{1+e^{-\theta^Tx}}$$ -逻辑回归模型中,$h_\theta \left( x \right)$ 的作用是,根据输入 $x$ 以及参数 $\theta$,计算得出”输出 $y=1$“的可能性(estimated probability),概率学中表示为: +逻辑回归模型中,$h_\theta \left( x \right)$ 的作用是,根据输入 $x$ 以及参数 $\theta$,计算得出”输出 $y=1$“的可能性(estimated probability),概率学中表示为: $$ \begin{align*} @@ -63,7 +61,7 @@ $$ [1]: https://en.wikipedia.org/wiki/Logistic_function [2]: https://en.wikipedia.org/wiki/Sigmoid_function -## 6.3 决策边界(Decision Boundary) +## 6.3 决策边界(Decision Boundary) 决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。 @@ -117,9 +115,9 @@ $$ -简单来说,决策边界就是**分类的分界线**,分类现在实际就由 $z$ (中的 $\theta$)决定啦。 +简单来说,决策边界就是**分类的分界线**,分类现在实际就由 $z$ (中的 $\theta$)决定啦。 -## 6.4 代价函数(Cost Function) +## 6.4 代价函数(Cost Function) 那我们怎么知道决策边界是啥样?$\theta$ 多少时能很好的拟合数据?当然,见招拆招,总要来个 $J(\theta)$。 @@ -133,7 +131,7 @@ $$ ![](images/20180111_080514.png) -如果此处的损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为**凸优化问题(Convex optimization)**。 +如果此处的损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为**凸优化问题(Convex optimization)**。 当然,损失函数不止平方损失函数一种。 @@ -154,7 +152,7 @@ $$ 区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。 -## 6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent) +## 6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent) 由于懒得分类讨论,对于二元分类问题,我们可把代价函数**简化**为一个函数: $Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right)$ @@ -197,8 +195,7 @@ $$ -**逻辑回归中代价函数求导的推导过程:**[]() - +**逻辑回归中代价函数求导的推导过程:** $$ J(\theta) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_\theta (x^{(i)})) + (1 - y^{(i)})\log (1 - h_\theta(x^{(i)}))] $$ @@ -241,20 +238,20 @@ $$ $$ -## 6.6 进阶优化(Advanced Optimization) +## 6.6 进阶优化(Advanced Optimization) 运行梯度下降算法,其能最小化代价函数 $J(\theta)$ 并得出 $\theta$ 的最优值,在使用梯度下降算法时,如果不需要观察代价函数的收敛情况,则直接计算 $J(\theta)$ 的导数项即可,而不需要计算 $J(\theta)$ 值。 -我们编写代码给出代价函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化代价函数给出参数的最优解。这类算法被称为**最优化算法(Optimization Algorithms)**,梯度下降算法不是唯一的最小化算法[^1]。 +我们编写代码给出代价函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化代价函数给出参数的最优解。这类算法被称为**最优化算法(Optimization Algorithms)**,梯度下降算法不是唯一的最小化算法[^1]。 一些最优化算法: -- 梯度下降法(Gradient Descent) -- 共轭梯度算法(Conjugate gradient) -- 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods) +- 梯度下降法(Gradient Descent) +- 共轭梯度算法(Conjugate gradient) +- 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods) - DFP算法 - - 局部优化法(BFGS) - - 有限内存局部优化法(L-BFGS) -- 拉格朗日乘数法(Lagrange multiplier) + - 局部优化法(BFGS) + - 有限内存局部优化法(L-BFGS) +- 拉格朗日乘数法(Lagrange multiplier) 比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 $\alpha$(少一个参数少一份痛苦啊!)。 @@ -316,7 +313,7 @@ functionVal = 0 exitFlag = 1 ``` -## 6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all) +## 6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all) 一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。 @@ -334,23 +331,23 @@ exitFlag = 1 对于某个样本实例,需计算所有的 $k$ 种分类情况得到 $h_\theta(x)$,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即 $y = \mathop{\max}\limits_i\,h_\theta^{\left( i \right)}\left( x \right)$。 -# 7 正则化(Regularization) -## 7.1 过拟合问题(The Problem of Overfitting) +# 7 正则化(Regularization) +## 7.1 过拟合问题(The Problem of Overfitting) 对于拟合的表现,可以分为三类情况: -- **欠拟合(Underfitting)** +- **欠拟合(Underfitting)** 无法很好的拟合训练集中的数据,预测值和实际值的误差很大,这类情况被称为欠拟合。拟合模型比较简单(特征选少了)时易出现这类情况。类似于,你上课不好好听,啥都不会,下课也差不多啥都不会。 -- **优良的拟合(Just right)** +- **优良的拟合(Just right)** 不论是训练集数据还是不在训练集中的预测数据,都能给出较为正确的结果。类似于,学霸学神! -- **过拟合(Overfitting)** +- **过拟合(Overfitting)** 能很好甚至完美拟合训练集中的数据,即 $J(\theta) \to 0$,但是对于不在训练集中的**新数据**,预测值和实际值的误差会很大,**泛化能力弱**,这类情况被称为过拟合。拟合模型过于复杂(特征选多了)时易出现这类情况。类似于,你上课跟着老师做题都会都听懂了,下课遇到新题就懵了不会拓展。 -线性模型中的拟合情况(左图欠拟合,右图过拟合): +线性模型中的拟合情况(左图欠拟合,右图过拟合): ![](images/20180112_091654.png) @@ -361,11 +358,11 @@ exitFlag = 1 为了度量拟合表现,引入: -- 偏差(bias) +- 偏差(bias) 指模型的预测值与真实值的**偏离程度**。偏差越大,预测值偏离真实值越厉害。偏差低意味着能较好地反应训练集中的数据情况。 -- 方差(Variance) +- 方差(Variance) 指模型预测值的**离散程度或者变化范围**。方差越大,数据的分布越分散,函数波动越大,泛化能力越差。方差低意味着拟合曲线的稳定性高,波动小。 @@ -380,14 +377,14 @@ exitFlag = 1 - 减少特征的数量 - 手动选取需保留的特征 - - 使用模型选择算法来选取合适的特征(如 PCA 算法) + - 使用模型选择算法来选取合适的特征(如 PCA 算法) - 减少特征的方式易丢失有用的特征信息 -- 正则化(Regularization) +- 正则化(Regularization) - 可保留所有参数(许多有用的特征都能轻微影响结果) - - 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响程度 + - 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响程度 - 当有很多参数对于模型只有轻微影响时,正则化方法的表现很好 -## 7.2 代价函数(Cost Function) +## 7.2 代价函数(Cost Function) 很多时候由于特征数量过多,过拟合时我们很难选出要保留的特征,这时候应用正则化方法则是很好的选择。 @@ -400,7 +397,7 @@ min_\theta\ \dfrac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + 1000\cdo $$ -上式中,我们在代价函数中增加了 $\theta_3$、$\theta_4$ 的惩罚项(penalty term) $1000\cdot\theta_3^2 + 1000\cdot\theta_4^2$,如果要最小化代价函数,那么势必需要极大地**减小 $\theta_3$、$\theta_4$**,从而使得假设函数中的 $\theta_3x^3$、$\theta_4x^4$ 这两项的参数非常小,就相当于没有了,假设函数也就**“变得”简单**了,从而在保留各参数的情况下避免了过拟合问题。 +上式中,我们在代价函数中增加了 $\theta_3$、$\theta_4$ 的惩罚项(penalty term)$1000\cdot\theta_3^2 + 1000\cdot\theta_4^2$,如果要最小化代价函数,那么势必需要极大地**减小 $\theta_3$、$\theta_4$**,从而使得假设函数中的 $\theta_3x^3$、$\theta_4x^4$ 这两项的参数非常小,就相当于没有了,假设函数也就**“变得”简单**了,从而在保留各参数的情况下避免了过拟合问题。 ![](images/20180114_090054.png) @@ -415,7 +412,7 @@ J\left( \theta \right)=\frac{1}{2m}[\sum\limits_{i=1}^{m}{{{({h_\theta}({{x}^{( $$ -> $\lambda$: 正则化参数(Regularization Parameter),$\lambda > 0$ +> $\lambda$: 正则化参数(Regularization Parameter),$\lambda > 0$ > > $\sum\limits_{j=1}^{n}$: 不惩罚基础参数 $\theta_0$ > @@ -424,18 +421,18 @@ $$ $\lambda$ 正则化参数类似于学习速率,也需要我们自行对其选择一个合适的值。 - 过大 - - 导致模型欠拟合(假设可能会变成近乎 $x = \theta_0$ 的直线 ) + - 导致模型欠拟合(假设可能会变成近乎 $x = \theta_0$ 的直线) - 无法正常去过拟问题 - 梯度下降可能无法收敛 - 过小 - 无法避免过拟合(等于没有) -> 正则化符合奥卡姆剃刀(Occam's razor)原理。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。 +> 正则化符合奥卡姆剃刀(Occam's razor)原理。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。 > 正则化是结构风险最小化策略的实现,是去过拟合问题的典型方法,虽然看起来多了个一参数多了一重麻烦,后文会介绍自动选取正则化参数的方法。模型越复杂,正则化参数值就越大。比如,正则化项可以是模型参数向量的范数。 -## 7.3 线性回归正则化(Regularized Linear Regression) +## 7.3 线性回归正则化(Regularized Linear Regression) 应用正则化的线性回归梯度下降算法: @@ -492,9 +489,9 @@ L = -前文提到正则化可以解决正规方程法中不可逆的问题,即增加了 $\lambda \cdot L$ 正则化项后,可以保证 $X^TX + \lambda \cdot L$ 可逆(invertible),即便 $X^TX$ 不可逆(non-invertible)。 +前文提到正则化可以解决正规方程法中不可逆的问题,即增加了 $\lambda \cdot L$ 正则化项后,可以保证 $X^TX + \lambda \cdot L$ 可逆(invertible),即便 $X^TX$ 不可逆(non-invertible)。 -## 7.4 逻辑回归正则化(Regularized Logistic Regression) +## 7.4 逻辑回归正则化(Regularized Logistic Regression) 为逻辑回归的代价函数添加正则化项: diff --git a/week4.md b/week4.md index 4b8a607..3bae0f5 100644 --- a/week4.md +++ b/week4.md @@ -1,10 +1,8 @@ -[TOC] +# 8 神经网络:表达(Neural Networks: Representation) -# 8 神经网络:表达(Neural Networks: Representation) +## 8.1 非线性假设(Non-linear Hypotheses) -## 8.1 非线性假设(Non-linear Hypotheses) - -理论上我们可以用多项式函数去近似任意函数(泰勒极数(Taylor series)),从而可得到任意问题的拟合曲线。 +理论上我们可以用多项式函数去近似任意函数(泰勒极数(Taylor series)),从而可得到任意问题的拟合曲线。 在实际处理时,特征量通常会很多,如果再构造高阶多项式等,特征数量将会急剧增加,这使得回归模型的复杂度太高,可见并不合适。神经网络无需构造高阶多项式,在特征量很大时也可以处理的很好。 @@ -14,9 +12,9 @@ 如上图,如果选取一小块 $50 * 50$ 像素的灰度图片(一个像素只有亮度一个值),选择每个像素点作为特征,则特征总量 $n=2500$(换成 RGB(一个像素有三个值),则 $n = 7500$),如果将其两两组合作为新特征,则特征数量将为 $C_{2500}^{2} \approx 3\ million$。 -## 8.2 神经网络和大脑(Neurons and the Brain) +## 8.2 神经网络和大脑(Neurons and the Brain) -脑科学家通过对动物实验,发现大脑中专用于处理听觉信号的脑皮层也能处理其他诸如视觉等信号,即如果切断其与耳朵的联系,将其与眼睛相连,则这块负责听觉的脑皮层区域也能接受并处理视觉信号,从而学会“看”。脑科学家通过这类换源实验,就推论假设大脑的学习算法只有一种(“one learning algorithm” hypothesis)。那么如果能找出这种学习算法并应用于计算机中,那梦想中和人一样的人工智能就成真了。 +脑科学家通过对动物实验,发现大脑中专用于处理听觉信号的脑皮层也能处理其他诸如视觉等信号,即如果切断其与耳朵的联系,将其与眼睛相连,则这块负责听觉的脑皮层区域也能接受并处理视觉信号,从而学会“看”。脑科学家通过这类换源实验,就推论假设大脑的学习算法只有一种(“one learning algorithm” hypothesis)。那么如果能找出这种学习算法并应用于计算机中,那梦想中和人一样的人工智能就成真了。 神经网络就源于**模拟人类大脑**,但其需要的计算量很大。随着计算机硬件性能的提高,神经网络逐渐从衰落变为流行,如今已广泛地被应用在各行各业中。 @@ -30,7 +28,7 @@ BrainPort 系统:帮助失明人士通过摄像头以及舌尖感官“看” 触觉皮带:在朝北时蜂鸣器会发出声响,可使人拥有方向感(声音信号转换为方向信号)。 -## 8.3 模型表示1(Model Representation I) +## 8.3 模型表示1(Model Representation I) 既然神经网络模仿的是大脑神经元,那就先看一下大脑的神经元长什么样吧: @@ -38,20 +36,20 @@ BrainPort 系统:帮助失明人士通过摄像头以及舌尖感官“看” 想象一下印刷厂中流水线的工人(机器人也算哦),每个工人都有特定的任务,比如装订,塑封,贴防伪标识等等,工人们看到书本并处理完自己的任务后,就回放回传送带,紧接着传送带就传给下一个环节的工人,如此不断重复从而完成一个又一个环节,直到一本书印制完成。 -那么类比一下,把上图中的**细胞核(nucleus)**类比成工人,**轴突(axon)**类比传送带,**树突(dendrite)**则比类比成工人的双眼。一个又一个细胞体,从树突接收需要处理的信息,对其进行处理后,再经由轴突通过电信号把处理完的信息传递出去,直到理解信息的内容。当然啦,我们大脑的实际上还要更为复杂,而且一个人的神经元数目就比地球上所有流水线的工人之和还要多呢~ +那么类比一下,把上图中的**细胞核(nucleus)**类比成工人,**轴突(axon)**类比传送带,**树突(dendrite)**则比类比成工人的双眼。一个又一个细胞体,从树突接收需要处理的信息,对其进行处理后,再经由轴突通过电信号把处理完的信息传递出去,直到理解信息的内容。当然啦,我们大脑的实际上还要更为复杂,而且一个人的神经元数目就比地球上所有流水线的工人之和还要多呢~ -人工神经网络中,树突对应**输入(input)**,细胞核对应**激活单元(activation unit)**,轴突对应**输出(output)**。 +人工神经网络中,树突对应**输入(input)**,细胞核对应**激活单元(activation unit)**,轴突对应**输出(output)**。 -我们一般把神经网络划分为三部分(注意,不是只有三层!),即输入层(input layer),隐藏层(hidden layer)和输出层(output layer)。 +我们一般把神经网络划分为三部分(注意,不是只有三层!),即输入层(input layer),隐藏层(hidden layer)和输出层(output layer)。 ![](images/20180116_001543.png) -图中的一个圈表示神经网络中的一个激活单元,输入层对应输入单元,隐藏层对应中间单元,输出层则对应输出单元。中间激活单元应用**激活函数**([activation_function](https://en.wikipedia.org/wiki/Activation_function))处理数据。 +图中的一个圈表示神经网络中的一个激活单元,输入层对应输入单元,隐藏层对应中间单元,输出层则对应输出单元。中间激活单元应用**激活函数**([activation_function](https://en.wikipedia.org/wiki/Activation_function))处理数据。 下面列出一些已有概念在神经网络中的别称: -- $x_0$: 偏置单元(bias unit),$x_0$=1 -- $\Theta$: 权重(weight),即参数。 +- $x_0$: 偏置单元(bias unit),$x_0$=1 +- $\Theta$: 权重(weight),即参数。 - 激活函数: $g$,即逻辑函数等。 - 输入层: 对应于训练集中的特征 $x$。 - 输出层: 对应于训练集中的结果 $y$。 @@ -80,11 +78,11 @@ $Size(\Theta^{(1)})=s_{j+1} \times (s_j + 1) =s_2 \times (s_1 + 1) = 3 \times 4$ $Size(\Theta^{(2)})=s_3 \times (s_2 + 1) = 1 \times 4$ -## 8.4 模型表示2(Model Representation II) +## 8.4 模型表示2(Model Representation II) ![](images/20180116_001543.png) -对输入层(Layer 1)的所有激活单元应用激活函数,从而得到隐藏层(Layer 2)中激活单元的值: +对输入层(Layer 1)的所有激活单元应用激活函数,从而得到隐藏层(Layer 2)中激活单元的值: $$ \begin{align*} a_1^{(2)} = g(\Theta_{10}^{(1)}x_0 + \Theta_{11}^{(1)}x_1 + \Theta_{12}^{(1)}x_2 + \Theta_{13}^{(1)}x_3)\\ @@ -96,7 +94,7 @@ $$ $h_\Theta(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{(2)} + \Theta_{12}^{(2)}a_2^{(2)} + \Theta_{13}^{(2)}a_3^{(2)})$ -上面的计算过程被称为**前向传播(Forward propagation)**,即从输入层开始,一层一层地向下计算并传递结果。 +上面的计算过程被称为**前向传播(Forward propagation)**,即从输入层开始,一层一层地向下计算并传递结果。 @@ -140,13 +138,13 @@ ${{z}^{\left( 2 \right)}}={{\Theta }^{\left( 1 \right)}} {{X}^{T}}$,这时 $z^ > 我们习惯于将输入层称为神经网络的第 0 层,如上图的神经网络被称为三层网络。 -## 8.5 例子和直观理解1(Examples and Intuitions I) +## 8.5 例子和直观理解1(Examples and Intuitions I) 为了更好的理解神经网络,举例单层神经网络进行逻辑运算的例子。 下面的例子中,$x_1,x_2$ 为二进制数。 -逻辑与(AND)运算(都为真值则结果才为真)神经网络: +逻辑与(AND)运算(都为真值则结果才为真)神经网络: ![](images/20180117_000612.png) @@ -158,19 +156,19 @@ $\Theta^{(1)} =\begin{bmatrix}-30 & 20 & 20\end{bmatrix}$,$h_\Theta(x) = g(-30 -再举一例,逻辑或(OR)运算(有一个真值则结果就为真)神经网络: +再举一例,逻辑或(OR)运算(有一个真值则结果就为真)神经网络: ![](images/20180117_000349.png) -## 8.6 例子和直观理解2(Examples and Intuitions II) +## 8.6 例子和直观理解2(Examples and Intuitions II) 下面逐步构建复杂一点的神经网络 ![](images/20180117_004820.png) -如上图,我们分别构建了三个单层神经网络,将这三个网络组合起来,可得到一个新的神经网络,其可完成逻辑运算中的异或(XNOR)操作: +如上图,我们分别构建了三个单层神经网络,将这三个网络组合起来,可得到一个新的神经网络,其可完成逻辑运算中的异或(XNOR)操作: ![](images/20180116_235545.png) @@ -180,7 +178,7 @@ $\Theta^{(1)} =\begin{bmatrix}-30 & 20 & 20 \newline 10 & -20 & -20\end{bmatrix} 可见,特征值能不断升级,并抽取出更多信息,直到计算出结果。而如此不断组合,我们就可以逐渐构造出越来越复杂、强大的神经网络,比如用于手写识别的神经网络。 -## 8.7 多类别分类(Multiclass Classification) +## 8.7 多类别分类(Multiclass Classification) 之前讨论的都是预测结果为单值情况下的神经网络,要实现多类别分类,其实只要修改一下输出层,让输出层包含多个输出单元即可。 @@ -194,7 +192,7 @@ $\Theta^{(1)} =\begin{bmatrix}-30 & 20 & 20 \newline 10 & -20 & -20\end{bmatrix} ![](images/20180117_011331.png) -如果预测结果 $h_\Theta(x) =\begin{bmatrix}0 \newline 0 \newline 1 \newline 0 \newline\end{bmatrix}$,那么表示 $h_\Theta(x)_3$,即分为第 3 类,对应于图中的摩托车(Motorcycle)。 +如果预测结果 $h_\Theta(x) =\begin{bmatrix}0 \newline 0 \newline 1 \newline 0 \newline\end{bmatrix}$,那么表示 $h_\Theta(x)_3$,即分为第 3 类,对应于图中的摩托车(Motorcycle)。 **总结一下** diff --git a/week5.md b/week5.md index 6c64e00..302e543 100644 --- a/week5.md +++ b/week5.md @@ -1,18 +1,16 @@ -[TOC] +# 9 神经网络: 学习(Neural Networks: Learning) -# 9 神经网络: 学习(Neural Networks: Learning) - -## 9.1 代价函数(Cost Function) +## 9.1 代价函数(Cost Function) 神经网络的分类问题有两种: -- 二元分类问题(0/1分类) +- 二元分类问题(0/1分类) - 只有一个输出单元 ($K=1$) + 只有一个输出单元($K=1$) -- 多元($K$)分类问题 +- 多元($K$)分类问题 - 输出单元不止一个($K\gt1$) + 输出单元不止一个($K\gt1$) 神经网络的代价函数公式: @@ -49,9 +47,9 @@ $J(\theta) = - \frac{1}{m} \sum_{i=1}^m [ y^{(i)}\ \log (h_\theta (x^{(i)})) + ( > > $\mathbb{R}^{m\times n}$: 即 $m \times n$ 维矩阵 -再次可见,神经网络背后的思想是和逻辑回归一样的,但由于计算复杂,实际上神经网络的代价函数 $J(\Theta)$ 是一个非凸(non-convex)函数。 +再次可见,神经网络背后的思想是和逻辑回归一样的,但由于计算复杂,实际上神经网络的代价函数 $J(\Theta)$ 是一个非凸(non-convex)函数。 -## 9.2 反向传播算法(Backpropagation Algorithm) +## 9.2 反向传播算法(Backpropagation Algorithm) 类似于回归模型中的梯度下降算法,为了求解神经网络最优化问题,我们也要计算 $\frac{\partial}{\partial\Theta}J(\Theta)$,以此 $\underset{\Theta}{\text{minimize}}J(\Theta)$ 。 @@ -67,7 +65,7 @@ $J(\theta) = - \frac{1}{m} \sum_{i=1}^m [ y^{(i)}\ \log (h_\theta (x^{(i)})) + ( 1. 运行前向传播算法,得到初始预测 $a^{(L)}=h_\Theta(x)$ 。 - 2. 运行反向传播算法,从输出层开始计算每一层预测的**误差**(error),以此来求取偏导。 + 2. 运行反向传播算法,从输出层开始计算每一层预测的**误差(error)**,以此来求取偏导。 ![](images/20180120_105744.png) @@ -123,7 +121,7 @@ $J(\theta) = - \frac{1}{m} \sum_{i=1}^m [ y^{(i)}\ \log (h_\theta (x^{(i)})) + ( > > 任何函数都可由三层神经网络以任意程度逼近。 -## 9.3 直观理解反向传播(Backpropagation Intuition) +## 9.3 直观理解反向传播(Backpropagation Intuition) 这节给出了反向传播算法中误差的数学意义: @@ -157,7 +155,7 @@ $J(\Theta) ={y}\log \left( 1+{{e}^{-z^{(L)}}} \right)+\left( 1-{y} \right)\log \ ![](images/20180121_110111.png) -再次为了便于计算,我们用到如上图这个三层(输入层一般不计数)神经网络。 +再次为了便于计算,我们用到如上图这个三层(输入层一般不计数)神经网络。 忆及 $z^{(l)} = \Theta^{(l-1)}a^{(l-1)}$,我们有 $h_\Theta(x)=a^{(4)}= g(z^{(4)})=g(\Theta^{(3)}a^{(3)})$ @@ -217,7 +215,7 @@ $$ 证明结束,留个课后作业呀,自己来计算一下 $J(\Theta)$ 关于 $\Theta^{(1)}$ 的偏导,是不是能得到同样的结果? -## 9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters) +## 9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters) 在 Octave/Matlab 中,如果要使用类似于 `fminunc` 等高级最优化函数,其函数参数、函数返回值等都为且只为向量,而由于神经网络中的权重是多维矩阵,所以需要用到参数展开这个技巧。 @@ -239,11 +237,11 @@ Theta2 = reshape(ThetaVec(111:118), 2, 4) > `reshape(A,m,n)`: 将向量 A 重构为 m * n 维矩阵。 -## 9.5 梯度检验(Gradient Checking) +## 9.5 梯度检验(Gradient Checking) 由于神经网络模型中的反向传播算法较为复杂,在小细节非常容易出错,从而无法得到最优解,故引入梯度检验。 -梯度检验采用数值估算(Numerical estimation)梯度的方法,被用于验证反向传播算法的正确性。 +梯度检验采用数值估算(Numerical estimation)梯度的方法,被用于验证反向传播算法的正确性。 ![](images/20180125_162704.png) @@ -272,13 +270,13 @@ end 在确认算法**没有问题后**(一般只需运行一次),由于数值估计的梯度检验效率很低,所以一定要**禁用它**。 -## 9.6 随机初始化(Random Initialization) +## 9.6 随机初始化(Random Initialization) 逻辑回归中,初始参数向量全为 0 没什么问题,在神经网络中,情况就不一样了。 初始权重如果全为 0,忆及 $z^{(l)} = \Theta^{(l-1)}a^{(l-1)}$,则隐藏层除了偏置单元,都为 0,而每个单元求导的值也都一样,这就相当于是在不断**重复计算同一结果**,也就是算着算着,一堆特征在每一层都变成只有一个特征(虽然有很多单元,但值都相等),这样,神经网络的性能和效果都会大打折扣,故需要随机初始化初始权重。 -随机初始化权重矩阵也为实现细节之一,用于打破对称性(Symmetry Breaking),使得 $\Theta^{(l)}_{ij} \in [-\epsilon,\epsilon]$ 。 +随机初始化权重矩阵也为实现细节之一,用于打破对称性(Symmetry Breaking),使得 $\Theta^{(l)}_{ij} \in [-\epsilon,\epsilon]$ 。 Octave/Matlab 代码: @@ -292,11 +290,11 @@ Theta2 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON; Theta3 = rand(1,11) * (2 * INIT_EPSILON) - INIT_EPSILON; ``` -> `rand(m,n)`: 返回一个在区间 (0,1) 内均匀分布的随机矩阵。 +> `rand(m,n)`: 返回一个在区间 $(0,1)$ 内均匀分布的随机矩阵。 > > $\epsilon$: 和梯度下降中的 $\epsilon$ 没有联系,这里只是一个任意实数,给定了权重矩阵初始化值的范围。 -## 9.7 综合起来(Putting It Together) +## 9.7 综合起来(Putting It Together) 一般来说,应用神经网络有如下步骤: @@ -325,7 +323,7 @@ Theta3 = rand(1,11) * (2 * INIT_EPSILON) - INIT_EPSILON; -## 9.8 自主驾驶(Autonomous Driving) +## 9.8 自主驾驶(Autonomous Driving) ![](images/20180125_195029.png) diff --git a/week6.md b/week6.md index 92316d6..98385d7 100644 --- a/week6.md +++ b/week6.md @@ -1,8 +1,6 @@ -[TOC] +# 10 机器学习的应用建议(Advice for Applying Machine Learning) -# 10 机器学习的应用建议(Advice for Applying Machine Learning) - -## 10.1 决定下一步该做什么(Deciding What to Try Next) +## 10.1 决定下一步该做什么(Deciding What to Try Next) ## 10.2 Evaluating a Hypothesis diff --git a/week7.md b/week7.md index 81246a0..7f71f48 100644 --- a/week7.md +++ b/week7.md @@ -1,5 +1,3 @@ -[TOC] - # 12 Support Vector Machines ## 12.1 Optimization Objective diff --git a/week8.md b/week8.md index cfa9a89..0491dff 100644 --- a/week8.md +++ b/week8.md @@ -1,5 +1,3 @@ -[TOC] - # 13 Unsupervised Learning ## 13.1 Unsupervised Learning_ Introduction diff --git a/week9.md b/week9.md index b6eccbe..2876962 100644 --- a/week9.md +++ b/week9.md @@ -1,5 +1,3 @@ -[TOC] - # 15 Anomaly Detection ## 15.1 Problem Motivation