diff --git a/week1.md b/week1.md index d3ced94..16cbb6a 100644 --- a/week1.md +++ b/week1.md @@ -116,7 +116,7 @@ **编程语言建议** -在机器学习刚开始时,**推荐使用 Octave 类的工程计算编程软件**,因为在 C++ 或 Java 等编程语言中,编写对应的代码需要用到复杂的库以及要写大量的冗余代码,比较耗费时间,建议可以在学习过后再考虑使用其他语言来构建系统。**** +在机器学习刚开始时,**推荐使用 Octave 类的工程计算编程软件**,因为在 C++ 或 Java 等编程语言中,编写对应的代码需要用到复杂的库以及要写大量的冗余代码,比较耗费时间,建议可以在学习过后再考虑使用其他语言来构建系统。 另外,在做**原型搭建**的时候也应该先考虑使用类似于 Octave 这种便于计算的编程软件,当其已经可以工作后,才将模型移植到其他的高级编程语言中。 > 注:Octave 与 MATLAB 语法相近,由于 MATLAB 为商业软件,课程中使用开源且免费的 Octave。 diff --git a/week4.html b/week4.html index 9feb8e6..5f11d24 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)8.2 神经网络和大脑(Neurons and the Brain)8.3 模型表示1(Model Representation I)8.4 模型表示2(Model Representation II)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)处理数据。

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

: 第 层的第 个激活单元

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

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

注意:

 

依据本节所给模型,有:

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)。

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

 

+

8 神经网络:表达(Neural Networks: Representation)8.1 非线性假设(Non-linear Hypotheses)8.2 神经网络和大脑(Neurons and the Brain)8.3 模型表示1(Model Representation I)8.4 模型表示2(Model Representation II)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)处理数据。

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

: 第 层的第 个激活单元

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

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

: 第 层的激活单元数目(不包含偏置单元)

注意:

 

依据本节所给模型,有:

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 5cc302c..cda92a8 100644 --- a/week4.md +++ b/week4.md @@ -4,7 +4,7 @@ ## 8.1 非线性假设(Non-linear Hypotheses) -理论上我们可以用多项式函数去近似任意函数(泰勒极数(Taylor series)),从而可得到任意问题的拟合曲线,。 +理论上我们可以用多项式函数去近似任意函数(泰勒极数(Taylor series)),从而可得到任意问题的拟合曲线。 在实际处理时,特征量通常会很多,如果再构造高阶多项式等,特征数量将会急剧增加,这使得回归模型的复杂度太高,可见并不合适。神经网络无需构造高阶多项式,在特征量很大时也可以处理的很好。 diff --git a/week5.html b/week5.html index d8c18e1..4951f93 100644 --- a/week5.html +++ b/week5.html @@ -220,6 +220,6 @@ header, .context-menu, .megamenu-content, footer { font-family: "Segoe UI", Aria -

9 Neural Networks: Learning9.1 Cost Function9.2 Backpropagation Algorithm9.3 Backpropagation Intuition9.4 Implementation Note_ Unrolling Parameters9.5 Gradient Checking9.6 Random Initialization9.7 Putting It Together9.8 Autonomous Driving

9 Neural Networks: Learning

9.1 Cost Function

9.2 Backpropagation Algorithm

9.3 Backpropagation Intuition

9.4 Implementation Note_ Unrolling Parameters

9.5 Gradient Checking

9.6 Random Initialization

9.7 Putting It Together

9.8 Autonomous Driving

+

9 神经网络: 学习(Neural Networks: Learning)9.1 代价函数(Cost Function)9.2 反向传播算法(Backpropagation Algorithm)9.3 直观理解反向传播(Backpropagation Intuition)9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters)9.5 Gradient Checking9.6 Random Initialization9.7 Putting It Together9.8 自主驾驶(Autonomous Driving)

9 神经网络: 学习(Neural Networks: Learning)

9.1 代价函数(Cost Function)

对于神经网络的代价函数公式:

: 神经网络的总层数

: 第 层激活单元的数量(不包含偏置单元)

: 分类总数,即输出层输出单元的数量

: 分为第 个分类的概率

 

注:此处符号表达和第四周的内容有异有同,暂时先按照视频来,有必要的话可以统一一下.

公式可长可长了是吧,那就对照下逻辑回归中的代价函数:

在神经网络的代价函数中,

: 即 维向量

: 即 维矩阵

可见,神经网络背后的思想是和逻辑回归一样的。

 

9.2 反向传播算法(Backpropagation Algorithm)

9.3 直观理解反向传播(Backpropagation Intuition)

9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters)

9.5 Gradient Checking

9.6 Random Initialization

9.7 Putting It Together

9.8 自主驾驶(Autonomous Driving)

\ No newline at end of file diff --git a/week5.md b/week5.md index 9af32d7..32654d0 100644 --- a/week5.md +++ b/week5.md @@ -1,14 +1,47 @@ [TOC] -# 9 Neural Networks: Learning +# 9 神经网络: 学习(Neural Networks: Learning) -## 9.1 Cost Function +## 9.1 代价函数(Cost Function) -## 9.2 Backpropagation Algorithm +对于神经网络的代价函数公式: -## 9.3 Backpropagation Intuition +$\begin{gather*} J(\Theta) = - \frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K \left[y^{(i)}_k \log ((h_\Theta (x^{(i)}))_k) + (1 - y^{(i)}_k)\log (1 - (h_\Theta(x^{(i)}))_k)\right] + \frac{\lambda}{2m}\sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} ( \Theta_{j,i}^{(l)})^2\end{gather*}$ -## 9.4 Implementation Note_ Unrolling Parameters +> $L$: 神经网络的总层数 +> +> $s_l$: 第 $l$ 层激活单元的数量(不包含偏置单元) +> +> $K$: 分类总数,即输出层输出单元的数量 +> +> $h_\Theta(x)_k$: 分为第 $k$ 个分类的概率 $P(y=k | x ; \Theta) $ +> +> +> +> 注:此处符号表达和第四周的内容有异有同,暂时先按照视频来,有必要的话可以统一一下. + +公式可长可长了是吧,那就对照下逻辑回归中的代价函数: + +$J(\theta) = - \frac{1}{m} \sum_{i=1}^m [ y^{(i)}\ \log (h_\theta (x^{(i)})) + (1 - y^{(i)})\ \log (1 - h_\theta(x^{(i)}))] + \frac{\lambda}{2m}\sum_{j=1}^n \theta_j^2$ + +在神经网络的代价函数中, + +- 左边的变化实际上是为了求解 $K$ 分类问题,即公式会对每个样本特征都运行 $K$ 次,并依次给出分为第 $k$ 类的概率。 +- 右边的正则化项比较容易理解,每一层有多维矩阵 $\Theta^{(l)}\in \mathbb{R}^{(s_l + 1)\times s_{l+1}}$,从左到右看这个三次求和式 $\sum\limits_{l=1}^{L-1}\sum\limits_{i=1}^{s_l}\sum\limits_{j=1}^{s_{l+1}}$ ,就是对每一层间的多维参数矩阵 $\Theta^{(l)}$ ,依次平方后求取其除了偏置参数部分的和值,并循环累加即得结果。 + +> $\mathbb{R}^{m}$: 即 $m$ 维向量 +> +> $\mathbb{R}^{m\times n}$: 即 $m \times n$ 维矩阵 + +可见,神经网络背后的思想是和逻辑回归一样的。 + + + +## 9.2 反向传播算法(Backpropagation Algorithm) + +## 9.3 直观理解反向传播(Backpropagation Intuition) + +## 9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters) ## 9.5 Gradient Checking @@ -16,4 +49,4 @@ ## 9.7 Putting It Together -## 9.8 Autonomous Driving \ No newline at end of file +## 9.8 自主驾驶(Autonomous Driving) \ No newline at end of file