diff --git a/image/20180116_235545.png b/image/20180116_235545.png new file mode 100644 index 0000000..33f246e Binary files /dev/null and b/image/20180116_235545.png differ diff --git a/image/20180117_000349.png b/image/20180117_000349.png new file mode 100644 index 0000000..123efd3 Binary files /dev/null and b/image/20180117_000349.png differ diff --git a/image/20180117_000612.png b/image/20180117_000612.png new file mode 100644 index 0000000..467232d Binary files /dev/null and b/image/20180117_000612.png differ diff --git a/image/20180117_004820.png b/image/20180117_004820.png new file mode 100644 index 0000000..8be2ba6 Binary files /dev/null and b/image/20180117_004820.png differ diff --git a/image/20180117_010904.png b/image/20180117_010904.png new file mode 100644 index 0000000..ab4b5b8 Binary files /dev/null and b/image/20180117_010904.png differ diff --git a/image/20180117_011331.png b/image/20180117_011331.png new file mode 100644 index 0000000..cd1e299 Binary files /dev/null and b/image/20180117_011331.png differ diff --git a/week3.html b/week3.html index 2392325..b46d7ee 100644 --- a/week3.html +++ b/week3.html @@ -332,19 +332,19 @@ header, .context-menu, .megamenu-content, footer { font-family: "Segoe UI", Aria -

6 逻辑回归(Logistic Regression)6.1 分类(Classification)6.2 假设函数表示(Hypothesis Representation)6.3 决策边界(Decision Boundary)6.4 损失函数(Cost Function)6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)6.6 进阶优化(Advanced Optimization)6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)7 正则化(Regularization)7.1 过拟合问题(The Problem of Overfitting)7.2 损失函数(Cost Function)7.3 线性回归正则化(Regularized Linear Regression)7.4 逻辑回归正则化(Regularized Logistic Regression)

6 逻辑回归(Logistic Regression)

6.1 分类(Classification)

在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。

讨论肿瘤诊断问题:

肿瘤诊断问题的目的是告诉病人是否为恶性肿瘤,是一个二元分类问题(binary class problems),则定义 ,其中 0 表示负向类(negative class),代表恶性肿瘤("-"),1 为正向类(positive class),代表良性肿瘤("+")。如图,定义最右边的样本为偏差项

在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定

,预测为 ,即正向类;

,预测为 ,即负向类。

即以 0.5 为阈值(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果

 

接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。

不仅如此,线性回归算法的值域为全体实数集(),则当线性回归函数给出诸如 等很大/很小(负数)的数值时,结果 ,这显得非常怪异。

 

区别于线性回归算法,逻辑回归算法是一个分类算法,其输出值永远在 0 到 1 之间,即

6.2 假设函数表示(Hypothesis Representation)

为了使 ,引入逻辑回归模型,定义假设函数

对比线性回归函数 表示逻辑函数(logistic function),复合起来,则称为逻辑回归函数。

逻辑函数是 S 形函数,会将所有实数映射到 范围。

sigmoid 函数(如下图)是逻辑函数的特殊情况,其公式为

sigmoid function

应用 sigmoid 函数,则逻辑回归模型:

逻辑回归模型中, 的作用是,根据输入 以及参数 ,计算得出”输出 “的可能性(estimated probability),概率学中表示为:

 

以肿瘤诊断为例, 表示病人有 的概率得了恶性肿瘤。

6.3 决策边界(Decision Boundary)

决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。

在逻辑回归中,有假设函数

为了得出分类的结果,这里和前面一样,规定以 为阈值:

回忆一下逻辑函数的图像:

sigmoid function

观察可得当 时,有 ,即

同线性回归模型的不同点在于:

直观一点来个例子, 是下图模型的假设函数:

根据上面的讨论,要进行分类,那么只要 时,就预测 ,即预测为正向类。

如果取 ,则有 ,当 时,易绘制图中的品红色直线即决策边界,为正向类(以红叉标注的数据)给出 的分类预测结果。

 

上面讨论了逻辑回归模型中线性拟合的例子,下面则是一个多项式拟合的例子,和线性回归中的情况也是类似的。

为了拟合下图数据,建模多项式假设函数:

这里取 ,决策边界对应了一个在原点处的单位圆(),如此便可给出分类结果,如图中品红色曲线:

 

当然,通过一些更为复杂的多项式,还能拟合那些图像显得非常怪异的数据,使得决策边界形似碗状、爱心状等等。

 

简单来说,决策边界就是分类的分界线,分类现在实际就由 (中的 )决定啦。

6.4 损失函数(Cost Function)

那我们怎么知道决策边界是啥样? 多少时能很好的拟合数据?当然,见招拆招,总要来个

如果直接套用线性回归的损失函数:

其中 ,可绘制关于 的图像,如下图

回忆线性回归中的损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中有许多局部最小点,这样将使得梯度下降算法无法确定收敛点是全局最优。

如果损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为凸优化问题(Convex optimization)

当然,损失函数不止平方损失函数一种。

对于逻辑回归,更换平方损失函数为对数损失函数,可由统计学中的最大似然估计方法可推出损失函数

则有关于 的图像如下:

如左图,当训练集的结果为 (正样本)时,随着假设函数趋向于 ,损失函数的值会趋于 ,即意味着拟合程度很好。如果假设函数此时趋于 ,则会给出一个很高的损失,拟合程度,算法会根据其迅速纠正 值,右图 同理。

区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。

6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)

由于懒得分类讨论,对于二元分类问题,我们可把损失函数简化为一个函数: -

,左边式子整体为 ,当 ,则 ,右边式子整体为0,也就和上面的分段函数一样了,而一个式子计算起来更方便。

向量化实现:

 

为了最优化 ,仍使用梯度下降法,算法同线性回归中一致:

解出偏导得:

注意,虽然形式上梯度下降算法同线性回归一样,但其中的假设函不同,即,不过求导后的结果也相同。

向量化实现:

 

对数损失函数求导的推导过程:

带入得

-

根据求偏导的性质,没有 的项都消去,则得:

所以有:

- - - - - - -

则可得对数损失函数的导数:

6.6 进阶优化(Advanced Optimization)

运行梯度下降算法,其能最小化损失函数 并得出 的最优值,在使用梯度下降算法时,如果不需要观察损失函数的收敛情况,则直接计算 的导数项即可,而不需要计算 值。

我们编写代码给出损失函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化损失函数给出参数的最优解。这类算法被称为最优化算法(Optimization Algorithms),梯度下降算法不是唯一的最小化算法1

一些最优化算法:

比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 (少一个参数少一份痛苦啊!)。

Octave/Matlab 中对这类高级算法做了封装,易于调用。

 

假设有 ,要求参数 的最优值。

下面为 Octave/Matlab 求解最优化问题的代码实例:

  1. 创建一个函数以返回损失函数及其偏导数:
 
  1. costFunction 函数及所需参数传入最优化函数 fminunc,以求解最优化问题:
 

'GradObj', 'on': 启用梯度目标参数(则需要将梯度传入算法)

'MaxIter', 100: 最大迭代次数为 100 次

@xxx: Octave/Matlab 中的函数指针

optTheta: 最优化得到的参数向量

functionVal: 引用函数最后一次的返回值

exitFlag: 标记损失函数是否收敛

注:Octave/Matlab 中可以使用 help fminunc 命令随时查看函数的帮助文档。

  1. 返回结果
 

6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)

一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。

原理是,转化多类别分类问题为多个二元分类问题,这种方法被称为 One-vs-all。

正式定义:

: 输出 (属于第 个分类)的可能性

: 类别总数,如上图

注意多类别分类问题中 的结果不再只是一个实数而是一个向量,如果类别总数为 ,现在 就是一个 维向量。

对于某个样本实例,需计算所有的 种分类情况得到 ,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即

7 正则化(Regularization)

7.1 过拟合问题(The Problem of Overfitting)

对于拟合的表现,可以分为三类情况:

线性模型中的拟合情况(左图欠拟合,右图过拟合): +

6 逻辑回归(Logistic Regression)

6.1 分类(Classification)

在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。

讨论肿瘤诊断问题:

肿瘤诊断问题的目的是告诉病人是否为恶性肿瘤,是一个二元分类问题(binary class problems),则定义 ,其中 0 表示负向类(negative class),代表恶性肿瘤("-"),1 为正向类(positive class),代表良性肿瘤("+")。如图,定义最右边的样本为偏差项

在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定

,预测为 ,即正向类;

,预测为 ,即负向类。

即以 0.5 为阈值(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果

 

接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。

不仅如此,线性回归算法的值域为全体实数集(),则当线性回归函数给出诸如 等很大/很小(负数)的数值时,结果 ,这显得非常怪异。

 

区别于线性回归算法,逻辑回归算法是一个分类算法,其输出值永远在 0 到 1 之间,即

6.2 假设函数表示(Hypothesis Representation)

为了使 ,引入逻辑回归模型,定义假设函数

对比线性回归函数 表示逻辑函数(logistic function),复合起来,则称为逻辑回归函数。

逻辑函数是 S 形函数,会将所有实数映射到 范围。

sigmoid 函数(如下图)是逻辑函数的特殊情况,其公式为

sigmoid function

应用 sigmoid 函数,则逻辑回归模型:

逻辑回归模型中, 的作用是,根据输入 以及参数 ,计算得出”输出 “的可能性(estimated probability),概率学中表示为:

 

以肿瘤诊断为例, 表示病人有 的概率得了恶性肿瘤。

6.3 决策边界(Decision Boundary)

决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。

在逻辑回归中,有假设函数

为了得出分类的结果,这里和前面一样,规定以 为阈值:

回忆一下 sigmoid 函数的图像:

sigmoid function

观察可得当 时,有 ,即

同线性回归模型的不同点在于:

直观一点来个例子, 是下图模型的假设函数:

根据上面的讨论,要进行分类,那么只要 时,就预测 ,即预测为正向类。

如果取 ,则有 ,当 时,易绘制图中的品红色直线即决策边界,为正向类(以红叉标注的数据)给出 的分类预测结果。

 

上面讨论了逻辑回归模型中线性拟合的例子,下面则是一个多项式拟合的例子,和线性回归中的情况也是类似的。

为了拟合下图数据,建模多项式假设函数:

这里取 ,决策边界对应了一个在原点处的单位圆(),如此便可给出分类结果,如图中品红色曲线:

 

当然,通过一些更为复杂的多项式,还能拟合那些图像显得非常怪异的数据,使得决策边界形似碗状、爱心状等等。

 

简单来说,决策边界就是分类的分界线,分类现在实际就由 (中的 )决定啦。

6.4 损失函数(Cost Function)

那我们怎么知道决策边界是啥样? 多少时能很好的拟合数据?当然,见招拆招,总要来个

如果直接套用线性回归的损失函数:

其中 ,可绘制关于 的图像,如下图

回忆线性回归中的损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中有许多局部最小点,这样将使得梯度下降算法无法确定收敛点是全局最优。

如果损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为凸优化问题(Convex optimization)

当然,损失函数不止平方损失函数一种。

对于逻辑回归,更换平方损失函数为对数损失函数,可由统计学中的最大似然估计方法可推出损失函数

则有关于 的图像如下:

如左图,当训练集的结果为 (正样本)时,随着假设函数趋向于 ,损失函数的值会趋于 ,即意味着拟合程度很好。如果假设函数此时趋于 ,则会给出一个很高的损失,拟合程度,算法会根据其迅速纠正 值,右图 同理。

区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。

6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)

由于懒得分类讨论,对于二元分类问题,我们可把损失函数简化为一个函数: +

,左边式子整体为 ,当 ,则 ,右边式子整体为0,也就和上面的分段函数一样了,而一个式子计算起来更方便。

向量化实现:

 

为了最优化 ,仍使用梯度下降法,算法同线性回归中一致:

解出偏导得:

注意,虽然形式上梯度下降算法同线性回归一样,但其中的假设函不同,即,不过求导后的结果也相同。

向量化实现:

 

对数损失函数求导的推导过程:

带入得

+

根据求偏导的性质,没有 的项都消去,则得:

所以有:

+ + + + + + +

则可得对数损失函数的导数:

6.6 进阶优化(Advanced Optimization)

运行梯度下降算法,其能最小化损失函数 并得出 的最优值,在使用梯度下降算法时,如果不需要观察损失函数的收敛情况,则直接计算 的导数项即可,而不需要计算 值。

我们编写代码给出损失函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化损失函数给出参数的最优解。这类算法被称为最优化算法(Optimization Algorithms),梯度下降算法不是唯一的最小化算法1

一些最优化算法:

比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 (少一个参数少一份痛苦啊!)。

Octave/Matlab 中对这类高级算法做了封装,易于调用。

 

假设有 ,要求参数 的最优值。

下面为 Octave/Matlab 求解最优化问题的代码实例:

  1. 创建一个函数以返回损失函数及其偏导数:
 
  1. costFunction 函数及所需参数传入最优化函数 fminunc,以求解最优化问题:
 

'GradObj', 'on': 启用梯度目标参数(则需要将梯度传入算法)

'MaxIter', 100: 最大迭代次数为 100 次

@xxx: Octave/Matlab 中的函数指针

optTheta: 最优化得到的参数向量

functionVal: 引用函数最后一次的返回值

exitFlag: 标记损失函数是否收敛

注:Octave/Matlab 中可以使用 help fminunc 命令随时查看函数的帮助文档。

  1. 返回结果
 

6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)

一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。

原理是,转化多类别分类问题为多个二元分类问题,这种方法被称为 One-vs-all。

正式定义:

: 输出 (属于第 个分类)的可能性

: 类别总数,如上图

注意多类别分类问题中 的结果不再只是一个实数而是一个向量,如果类别总数为 ,现在 就是一个 维向量。

对于某个样本实例,需计算所有的 种分类情况得到 ,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即

7 正则化(Regularization)

7.1 过拟合问题(The Problem of Overfitting)

对于拟合的表现,可以分为三类情况:

线性模型中的拟合情况(左图欠拟合,右图过拟合):

逻辑分类模型中的拟合情况:

 

为了度量拟合表现,引入:

据此,我们有对同一数据的各类拟合情况如下图: -

据上图,高偏差意味着欠拟合,高方差意味着过拟合。

我们应尽量使得拟合模型处于低方差(较好地拟合数据)状态且同时处于低偏差(较好地预测新值)的状态。

避免过拟合的方法有:

7.2 损失函数(Cost Function)

很多时候由于特征数量过多,过拟合时我们很难选出要保留的特征,这时候应用正则化方法则是很好的选择。

上文中, 这样一个复杂的多项式较易过拟合,在不减少特征的情况下,如果能消除类似于 等复杂部分,那复杂函数就变得简单了

为了保留各个参数的信息,不修改假设函数,改而修改损失函数:

上式中,我们在损失函数中增加了 的惩罚项(penalty term) ,如果要最小化损失函数,那么势必需要极大地减小 ,从而使得假设函数中的 这两项的参数非常小,就相当于没有了,假设函数也就“变得”简单了,从而在保留各参数的情况下避免了过拟合问题。

 

根据上面的讨论,有时也无法决定要减少哪个参数,故统一惩罚除了 外的所有参数。

损失函数:

: 正则化参数(Regularization Parameter),

: 不惩罚基础参数

: 正则化项

正则化参数类似于学习速率,也需要我们自行对其选择一个合适的值。

正则化符合奥卡姆剃刀(Occam's razor)原理。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。

正则化是结构风险最小化策略的实现,是去过拟合问题的典型方法,虽然看起来多了个一参数多了一重麻烦,后文会介绍自动选取正则化参数的方法。模型越复杂,正则化参数值就越大。比如,正则化项可以是模型参数向量的范数。

7.3 线性回归正则化(Regularized Linear Regression)

应用正则化的线性回归梯度下降算法:

也可以移项得到更新表达式的另一种表示形式

: 正则化项

 

应用正则化的正规方程法2

: 正则化项

: 第一行第一列为 维单位矩阵

Matlab/Octave 代码:

 

 

前文提到正则化可以解决正规方程法中不可逆的问题,即增加了 正则化项后,可以保证 可逆(invertible),即便 不可逆(non-invertible)。

7.4 逻辑回归正则化(Regularized Logistic Regression)

为逻辑回归的损失函数添加正则化项:

前文已经证明过逻辑回归和线性回归的损失函数的求导结果是一样的,此处通过给正则化项添加常数 ,则其求导结果也就一样了。

从而有应用正则化的逻辑回归梯度下降算法:

 


+

据上图,高偏差意味着欠拟合,高方差意味着过拟合。

我们应尽量使得拟合模型处于低方差(较好地拟合数据)状态且同时处于低偏差(较好地预测新值)的状态。

避免过拟合的方法有:

  • 减少特征的数量

    • 手动选取需保留的特征
    • 使用模型选择算法来选取合适的特征(如 PCA 算法)
    • 减少特征的方式易丢失有用的特征信息
  • 正则化(Regularization)

    • 可保留所有参数(许多有用的特征都能轻微影响结果)
    • 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响程度
    • 当有很多参数对于模型只有轻微影响时,正则化方法的表现很好

7.2 损失函数(Cost Function)

很多时候由于特征数量过多,过拟合时我们很难选出要保留的特征,这时候应用正则化方法则是很好的选择。

上文中, 这样一个复杂的多项式较易过拟合,在不减少特征的情况下,如果能消除类似于 等复杂部分,那复杂函数就变得简单了

为了保留各个参数的信息,不修改假设函数,改而修改损失函数:

上式中,我们在损失函数中增加了 的惩罚项(penalty term) ,如果要最小化损失函数,那么势必需要极大地减小 ,从而使得假设函数中的 这两项的参数非常小,就相当于没有了,假设函数也就“变得”简单了,从而在保留各参数的情况下避免了过拟合问题。

 

根据上面的讨论,有时也无法决定要减少哪个参数,故统一惩罚除了 外的所有参数。

损失函数:

: 正则化参数(Regularization Parameter),

: 不惩罚基础参数

: 正则化项

正则化参数类似于学习速率,也需要我们自行对其选择一个合适的值。

  • 过大

    • 导致模型欠拟合(假设可能会变成近乎 的直线 )
    • 无法正常去过拟问题
    • 梯度下降可能无法收敛
  • 过小

    • 无法避免过拟合(等于没有)

正则化符合奥卡姆剃刀(Occam's razor)原理。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率。

正则化是结构风险最小化策略的实现,是去过拟合问题的典型方法,虽然看起来多了个一参数多了一重麻烦,后文会介绍自动选取正则化参数的方法。模型越复杂,正则化参数值就越大。比如,正则化项可以是模型参数向量的范数。

7.3 线性回归正则化(Regularized Linear Regression)

应用正则化的线性回归梯度下降算法:

也可以移项得到更新表达式的另一种表示形式

: 正则化项

 

应用正则化的正规方程法2

: 正则化项

: 第一行第一列为 维单位矩阵

Matlab/Octave 代码:

 

 

前文提到正则化可以解决正规方程法中不可逆的问题,即增加了 正则化项后,可以保证 可逆(invertible),即便 不可逆(non-invertible)。

7.4 逻辑回归正则化(Regularized Logistic Regression)

为逻辑回归的损失函数添加正则化项:

前文已经证明过逻辑回归和线性回归的损失函数的求导结果是一样的,此处通过给正则化项添加常数 ,则其求导结果也就一样了。

从而有应用正则化的逻辑回归梯度下降算法:

 

diff --git a/week3.md b/week3.md index 08295a8..3f52a7e 100644 --- a/week3.md +++ b/week3.md @@ -72,7 +72,7 @@ $\begin{align*}& h_\theta(x) = P(y=1 | x ; \theta) = 1 - P(y=0 | x ; \theta) \ne $\begin{align*}& h_\theta(x) \geq 0.5 \rightarrow y = 1 \newline& h_\theta(x) < 0.5 \rightarrow y = 0 \newline\end{align*}$ -回忆一下逻辑函数的图像: +回忆一下 sigmoid 函数的图像: ![sigmoid function](image/2413fbec8ff9fa1f19aaf78265b8a33b_Logistic_function.png) diff --git a/week4.html b/week4.html index d46cfa3..7df1b73 100644 --- a/week4.html +++ b/week4.html @@ -220,6 +220,6 @@ header, .context-menu, .megamenu-content, footer { font-family: "Segoe UI", Aria -

8 神经网络:表达(Neural Networks: Representation)

8.1 非线性假设(Non-linear Hypotheses)

理论上我们可以用多项式函数去近似任意函数,从而可得到任意问题的拟合曲线,即泰勒极数(Taylor series)。

在实际处理时,特征量通常会很多,如果再构造高阶多项式等,特征数量将会急剧增加,这使得线性模型的复杂度太高,可见并不合适。神经网络无需构造高阶多项式,在特征量很大时也可以处理的很好。

那特征能有多大呢?下面是一个计算机视觉中的例子:

如上图,如果选取一小块 像素的灰度图片(一个像素只有亮度一个值),选择每个像素点作为特征,则特征总量 (换成 RGB(一个像素有三个值),则 ),如果将其两两组合作为新特征,则特征数量将为

8.2 神经网络和大脑(Neurons and the Brain)

脑科学家通过对动物实验,发现大脑中专用于处理听觉信号的脑皮层也能处理其他诸如视觉等信号,即如果切断其与耳朵的联系,将其与眼睛相连,则这块负责听觉的脑皮层区域也能接受并处理视觉信号,从而学会“看”。脑科学家通过这类换源实验,就推论假设大脑的学习算法只有一种(“one learning algorithm” hypothesis)。那么如果能找出这种学习算法并应用于计算机中,那梦想中和人一样的人工智能就成真了。

神经网络就源于模拟人类大脑,但其需要的计算量很大。随着计算机硬件性能的提高,神经网络逐渐从衰落变为流行,如今已广泛地被应用在各行各业中。

下图是根据研究做的一些应用(有兴趣可回顾视频):

BrainPort 系统:帮助失明人士通过摄像头以及舌尖感官“看”东西

触觉皮带:在朝北时蜂鸣器会发出声响,可使人拥有方向感(声音信号转换为方向信号)。

8.3 模型表示1(Model Representation I)

既然神经网络模仿的是大脑神经元,那就先看一下大脑的神经元长什么样吧:

来源: http://blog.csdn.net/zzwu/article/details/574931

想象一下印刷厂中流水线的工人(机器人也算哦),每个工人都有特定的任务,比如装订,塑封,贴防伪标识等等,工人们看到书本并处理完自己的任务后,就回放回传送带,紧接着传送带就传给下一个环节的工人,如此不断重复从而完成一个又一个环节,直到一本书印制完成。

那么类比一下,把上图中的细胞核(nucleus)类比成工人,轴突(axon)类比传送带,树突(dendrite)则比类比成工人的双眼。一个又一个细胞体,从树突接收需要处理的信息,对其进行处理后,再经由轴突通过电信号把处理完的信息传递出去,直到理解信息的内容。当然啦,我们大脑的实际上还要更为复杂,而且一个人的神经元数目就比地球上所有流水线的工人之和还要多呢~

人工神经网络中,树突对应输入(input),细胞核对应激活单元(activation unit),轴突对应输出(output)

我们一般把神经网络划分为三部分(注意,不是只有三层!),即输入层(input layer),隐藏层(hidden layer)和输出层(output layer)。

图中的一个圈表示神经网络中的一个激活单元,输入层对应输入单元,隐藏层对应中间单元,输出层则对应输出单元。中间激活单元应用激活函数(activation_function)处理数据。

下面列出一些已有概念在神经网络中的别称:

  • : 偏置单元(bias unit),=1
  • : 权重(weight),即参数。
  • 激活函数: ,即逻辑函数等。
  • 输入层: 对应于训练集中的特征
  • 输出层: 对应于训练集中的结果

: 第 层的第 个激活单元

: 从第 层映射到第 层时的权重矩阵。

: 从第 层的第 个单元映射到第 层的第 个单元的权重

注意:

  • 符号较多,记不住可随时回顾!
  • 每个单元会作用于下一层的所有单元(矩阵乘法运算)。
  • 如果第 层有 个单元,第 层有 个单元, 是一个 维的权重矩阵。即每一层的权重矩阵大小都是非固定的。
  • 其中, 来自于偏置单元,这样意味着输出层不包含偏置单元,输入层和隐藏层需要增加偏置单元。

 

依据本节所给模型,有:

8.4 模型表示2(Model Representation II)

神经网络中的符号较多,易乱,建议多看几遍多回顾。

对第 层的所有激活单元应用激活函数,从而得到第 层激活单元的值:

对第 层的所有激活单元应用激活函数,从而得到输出:

上面的计算过程被称为前向传播(Forward propagation),即从输入层开始,一层一层地向下计算并传递结果。

 

再回顾一下逻辑回归:

是不是除了符号表示,其他都完全一样?其实神经网络就好似回归模型,只不过输入变成了中间单元 。中间单元从输入向量 开始,下一层的每个单元对所有输入的信息通过最优化算法不断迭代计算,每个单元因为包含了前一层的所有单元值,那么每个单元都能依赖于权重与输入得出关于输入向量的更多信息,就好像是在给假设函数加多项式。

中间单元就好像是包含了更多信息的升级版输入参数,使用包含更多信息的中间单元,也能产生更好地预测。

 

向量化实现

定义

则有

预测结果即

 

即有

,通过该式即可计算神经网络中每一层的值。

结果即

扩展到所有样本实例:

,这时 是一个 维向量。

: 训练集中的样本实例数量

: 第二层神经网络中激活单元的数量

 

当然,神经网络不仅限于三层,每层的激活单元数量也并不固定:

8.5 例子和直观理解1(Examples and Intuitions I)

8.6 例子和直观理解2(Examples and Intuitions II)

8.7 多类别分类(Multiclass Classification)

+

8 神经网络:表达(Neural Networks: Representation)

8.1 非线性假设(Non-linear Hypotheses)

理论上我们可以用多项式函数去近似任意函数,从而可得到任意问题的拟合曲线,即泰勒极数(Taylor series)。

在实际处理时,特征量通常会很多,如果再构造高阶多项式等,特征数量将会急剧增加,这使得线性模型的复杂度太高,可见并不合适。神经网络无需构造高阶多项式,在特征量很大时也可以处理的很好。

那特征能有多大呢?下面是一个计算机视觉中的例子:

如上图,如果选取一小块 像素的灰度图片(一个像素只有亮度一个值),选择每个像素点作为特征,则特征总量 (换成 RGB(一个像素有三个值),则 ),如果将其两两组合作为新特征,则特征数量将为

8.2 神经网络和大脑(Neurons and the Brain)

脑科学家通过对动物实验,发现大脑中专用于处理听觉信号的脑皮层也能处理其他诸如视觉等信号,即如果切断其与耳朵的联系,将其与眼睛相连,则这块负责听觉的脑皮层区域也能接受并处理视觉信号,从而学会“看”。脑科学家通过这类换源实验,就推论假设大脑的学习算法只有一种(“one learning algorithm” hypothesis)。那么如果能找出这种学习算法并应用于计算机中,那梦想中和人一样的人工智能就成真了。

神经网络就源于模拟人类大脑,但其需要的计算量很大。随着计算机硬件性能的提高,神经网络逐渐从衰落变为流行,如今已广泛地被应用在各行各业中。

下图是根据研究做的一些应用(有兴趣可回顾视频):

BrainPort 系统:帮助失明人士通过摄像头以及舌尖感官“看”东西

触觉皮带:在朝北时蜂鸣器会发出声响,可使人拥有方向感(声音信号转换为方向信号)。

8.3 模型表示1(Model Representation I)

既然神经网络模仿的是大脑神经元,那就先看一下大脑的神经元长什么样吧:

来源: http://blog.csdn.net/zzwu/article/details/574931

想象一下印刷厂中流水线的工人(机器人也算哦),每个工人都有特定的任务,比如装订,塑封,贴防伪标识等等,工人们看到书本并处理完自己的任务后,就回放回传送带,紧接着传送带就传给下一个环节的工人,如此不断重复从而完成一个又一个环节,直到一本书印制完成。

那么类比一下,把上图中的细胞核(nucleus)类比成工人,轴突(axon)类比传送带,树突(dendrite)则比类比成工人的双眼。一个又一个细胞体,从树突接收需要处理的信息,对其进行处理后,再经由轴突通过电信号把处理完的信息传递出去,直到理解信息的内容。当然啦,我们大脑的实际上还要更为复杂,而且一个人的神经元数目就比地球上所有流水线的工人之和还要多呢~

人工神经网络中,树突对应输入(input),细胞核对应激活单元(activation unit),轴突对应输出(output)

我们一般把神经网络划分为三部分(注意,不是只有三层!),即输入层(input layer),隐藏层(hidden layer)和输出层(output layer)。

图中的一个圈表示神经网络中的一个激活单元,输入层对应输入单元,隐藏层对应中间单元,输出层则对应输出单元。中间激活单元应用激活函数(activation_function)处理数据。

下面列出一些已有概念在神经网络中的别称:

  • : 偏置单元(bias unit),=1
  • : 权重(weight),即参数。
  • 激活函数: ,即逻辑函数等。
  • 输入层: 对应于训练集中的特征
  • 输出层: 对应于训练集中的结果

: 第 层的第 个激活单元

: 从第 层映射到第 层时的权重矩阵。

: 从第 层的第 个单元映射到第 层的第 个单元的权重

注意:

  • 符号较多,记不住可随时回顾!
  • 每个单元会作用于下一层的所有单元(矩阵乘法运算)。
  • 如果第 层有 个单元,第 层有 个单元, 是一个 维的权重矩阵。即每一层的权重矩阵大小都是非固定的。
  • 其中, 来自于偏置单元,这样意味着输出层不包含偏置单元,输入层和隐藏层需要增加偏置单元。

 

依据本节所给模型,有:

8.4 模型表示2(Model Representation II)

对第 层的所有激活单元应用激活函数,从而得到第 层激活单元的值:

对第 层的所有激活单元应用激活函数,从而得到输出:

上面的计算过程被称为前向传播(Forward propagation),即从输入层开始,一层一层地向下计算并传递结果。

 

再回顾一下逻辑回归:

是不是除了符号表示,其他都完全一样?其实神经网络就好似回归模型,只不过输入变成了中间单元 。从输入 开始,下一层的每个激活单元都包含了上一层的所有信息(单元值),通过最优化算法不断迭代计算,激活单元能得出关于输入 的更多信息,这就好像是在给假设函数加多项式。中间层的这些单元好似升级版的初始特征,从而能给出更好的预测。

 

向量化实现

定义

则有

预测结果即

 

即有

,通过该式即可计算神经网络中每一层的值。

结果即

扩展到所有样本实例:

,这时 是一个 维向量。

: 训练集中的样本实例数量

: 第二层神经网络中激活单元的数量

 

当然,神经网络不仅限于三层,每层的激活单元数量也并不固定:

8.5 例子和直观理解1(Examples and Intuitions I)

为了更好的理解神经网络,举例单层神经网络进行逻辑运算的例子。

下面的例子中, 为二进制数。

逻辑与(AND)运算(都为真值则结果才为真)神经网络:

回顾 sigmoid 函数图像,根据输入则有上图中右边的表格,即 。这样就实现了一个能够进行与运算的神经网络。

sigmoid function

 

再举一例,逻辑或(OR)运算(有一个真值则结果就为真)神经网络:

 

8.6 例子和直观理解2(Examples and Intuitions II)

下面逐步构建复杂一点的神经网络

如上图,我们分别构建了三个单层神经网络,将这三个网络组合起来,可得到一个新的神经网络,其可完成逻辑运算中的异或(XNOR)操作:

这里的组合即为

可见,特征值能不断升级,并抽取出更多信息,直到计算出结果。而如此不断组合,我们就可以逐渐构造出越来越复杂、强大的神经网络,比如用于手写识别的神经网络。

8.7 多类别分类(Multiclass Classification)

之前讨论的都是预测结果为单值情况下的神经网络,要实现多类别分类,其实只要修改一下输出层,让输出层包含多个输出单元即可。

举一个 4 分类问题的实例:

有四种分类情况,那么就让输出层包含 4 个输出单元即可,则 为 4 维向量。

神经网络中的多分类算法算是对 one-vs-all 思想的扩展,定义预测结果一共有 4 种情况:

如果预测结果

那么表示 ,即分为第 3 类,对应于图中的摩托车(Motorcycle)。

总结一下,要分为 类,就在输出层放置 个输出单元,对于单个样本实例, 则是一个 维结果向量,最后依据结果向量,得出属于哪个类

 

\ No newline at end of file diff --git a/week4.md b/week4.md index 3f73455..e45a6d3 100644 --- a/week4.md +++ b/week4.md @@ -74,14 +74,12 @@ BrainPort 系统:帮助失明人士通过摄像头以及舌尖感官“看” 依据本节所给模型,有: -$Size(\Theta^{(1)})=s_{j+1} \times (s_j + 1) = 3 \times 4$ +$Size(\Theta^{(1)})=s_{j+1} \times (s_j + 1) =s_2 \times (s_1 + 1) = 3 \times 4$ -$Size(\Theta^{(2)})=s_{j+1} \times (s_j + 1) = 1 \times 4$ +$Size(\Theta^{(2)})=s_3 \times (s_2 + 1) = 1 \times 4$ ## 8.4 模型表示2(Model Representation II) -> 神经网络中的符号较多,易乱,建议多看几遍多回顾。 - ![](image/20180116_001543.png) 对第 $1$ 层的所有激活单元应用激活函数,从而得到第 $2$ 层激活单元的值: @@ -100,9 +98,7 @@ $h_\Theta(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{ ${h_\theta}\left( x \right)=g\left( {\theta_0}+{\theta_1}{x_1}+{\theta_{2}}{x_{2}}+{\theta_{3}}x_{1}^{2} \right)$ -是不是除了符号表示,其他都完全一样?其实神经网络就好似回归模型,只不过输入变成了中间单元 $a_1^{(j)}, a_2^{(j)}, \dots, a_n^{(j)}$。中间单元从输入向量 $x$ 开始,下一层的每个单元对所有输入的信息通过最优化算法不断迭代计算,每个单元因为包含了前一层的所有单元值,那么每个单元都能依赖于权重与输入得出关于输入向量的更多信息,就好像是在给假设函数加多项式。 - -中间单元就好像是包含了更多信息的升级版输入参数,使用包含更多信息的中间单元,也能产生更好地预测。 +是不是除了符号表示,其他都完全一样?其实神经网络就好似回归模型,只不过输入变成了中间单元 $a_1^{(j)}, a_2^{(j)}, \dots, a_n^{(j)}$。从输入 $x$ 开始,下一层的每个激活单元都包含了上一层的所有信息(单元值),通过最优化算法不断迭代计算,激活单元能得出关于输入 $x$ 的更多信息,这就好像是在给假设函数加多项式。中间层的这些单元好似升级版的初始特征,从而能给出更好的预测。 @@ -140,6 +136,61 @@ ${{z}^{\left( 2 \right)}}={{\Theta }^{\left( 1 \right)}} {{X}^{T}}$,这时 $z^ ## 8.5 例子和直观理解1(Examples and Intuitions I) +为了更好的理解神经网络,举例单层神经网络进行逻辑运算的例子。 + +下面的例子中,$x_1,x_2$ 为二进制数。 + +逻辑与(AND)运算(都为真值则结果才为真)神经网络: + +![](image/20180117_000612.png) + +$\Theta^{(1)} =\begin{bmatrix}-30 & 20 & 20\end{bmatrix}$,$h_\Theta(x) = g(-30+20x_1+20x_2)$。 + +回顾 sigmoid 函数图像,根据输入则有上图中右边的表格,即 $h_\theta(x)\approx x_1\ \text{AND}\ x_2$。这样就实现了一个能够进行与运算的神经网络。 + +![sigmoid function](image/2413fbec8ff9fa1f19aaf78265b8a33b_Logistic_function.png) + + + +再举一例,逻辑或(OR)运算(有一个真值则结果就为真)神经网络: + +![](image/20180117_000349.png) + + + ## 8.6 例子和直观理解2(Examples and Intuitions II) -## 8.7 多类别分类(Multiclass Classification) \ No newline at end of file +下面逐步构建复杂一点的神经网络 + +![](image/20180117_004820.png) + +如上图,我们分别构建了三个单层神经网络,将这三个网络组合起来,可得到一个新的神经网络,其可完成逻辑运算中的异或(XNOR)操作: + +![](image/20180116_235545.png) + +这里的组合即为 $\text{XNOR}=( \text{x}_1\, \text{AND}\, \text{x}_2 )\, \text{OR} \left( \left( \text{NOT}\, \text{x}_1 \right) \text{AND} \left( \text{NOT}\, \text{x}_2 \right) \right)$ + +$\Theta^{(1)} =\begin{bmatrix}-30 & 20 & 20 \newline 10 & -20 & -20\end{bmatrix}$,$\Theta^{(2)} =\begin{bmatrix}-10 & 20 & 20\end{bmatrix}$,$\begin{align*}& a^{(2)} = g(\Theta^{(1)} \cdot x) \newline& a^{(3)} = g(\Theta^{(2)} \cdot a^{(2)}) \newline& h_\Theta(x) = a^{(3)}\end{align*}$ + +可见,特征值能不断升级,并抽取出更多信息,直到计算出结果。而如此不断组合,我们就可以逐渐构造出越来越复杂、强大的神经网络,比如用于手写识别的神经网络。 + +## 8.7 多类别分类(Multiclass Classification) + +之前讨论的都是预测结果为单值情况下的神经网络,要实现多类别分类,其实只要修改一下输出层,让输出层包含多个输出单元即可。 + +举一个 4 分类问题的实例: + +![](image/20180117_010904.png) + +有四种分类情况,那么就让输出层包含 4 个输出单元即可,则 $h_\Theta$ 为 4 维向量。 + +神经网络中的多分类算法算是对 one-vs-all 思想的扩展,定义预测结果一共有 4 种情况: + +![](image/20180117_011331.png) + +如果预测结果 $h_\Theta(x) =\begin{bmatrix}0 \newline 0 \newline 1 \newline 0 \newline\end{bmatrix}$, + +那么表示 $h_\Theta(x)_3$,即分为第 3 类,对应于图中的摩托车(Motorcycle)。 + +**总结一下**,要分为 $k$ 类,就在输出层放置 $k$ 个输出单元,对于单个样本实例,$h_\Theta(x)$ 则是一个 $k$ 维结果向量,最后依据结果向量,得出属于哪个类 $y^{(i)}$。 +