@@ -16,7 +16,7 @@ https://www.coursera.org/learn/machine-learning | |||||
本项目包含课程中的课后作业以及笔记: | 本项目包含课程中的课后作业以及笔记: | ||||
1. 笔记(notes)都为中文,为了便于复习和扩充等,尽量会按照视频目录,以及视频内容进行提炼整理。 | |||||
1. 笔记(notes)都为中文,为了便于复习和扩充等,尽量会按照视频目录,以及视频内容进行提炼整理。 | |||||
2. 遵循[荣誉准则][honor code],现已移除已通过的课后编程作业的源代码,之后会改为指导笔记形式陆续更新。 | 2. 遵循[荣誉准则][honor code],现已移除已通过的课后编程作业的源代码,之后会改为指导笔记形式陆续更新。 | ||||
感谢关注,欢迎分享。 | 感谢关注,欢迎分享。 | ||||
@@ -32,7 +32,7 @@ https://www.coursera.org/learn/machine-learning | |||||
3. 下载 .html 网页文件及 笔记图片 image 文件夹,浏览器打开阅读。 | 3. 下载 .html 网页文件及 笔记图片 image 文件夹,浏览器打开阅读。 | ||||
4. 笔记源码(.md)基于支持 LaTeX 的 markdown 编辑器 [Typora][Typora],其他类似的编辑器也可以阅读及编辑,注意其他编辑器可能会产生排版问题。 | |||||
4. 笔记源码(.md)基于支持 LaTeX 的 markdown 编辑器 [Typora][Typora],其他类似的编辑器也可以阅读及编辑,注意其他编辑器可能会产生排版问题。 | |||||
## Resources | ## Resources | ||||
@@ -107,7 +107,7 @@ | |||||
在鸡尾酒会上,大家说话声音彼此重叠,几乎很难分辨出面前的人说了什么。我们很难对于这个问题进行数据标注,而这里的通过机器学习的无监督学习算法,就可以将说话者的声音同背景音乐分离出来,看视频,效果还不错呢\~~。 | 在鸡尾酒会上,大家说话声音彼此重叠,几乎很难分辨出面前的人说了什么。我们很难对于这个问题进行数据标注,而这里的通过机器学习的无监督学习算法,就可以将说话者的声音同背景音乐分离出来,看视频,效果还不错呢\~~。 | ||||
嗯,这块是打打鸡血的,只需要一行代码就解决了问题,就是这么简单!当然,我没复现过 ^_^…… | |||||
嗯,这块是打打鸡血的,只需要一行代码就解决了问题,就是这么简单!当然,我没复现过 \^\_\^…… | |||||
神奇的一行代码: | 神奇的一行代码: | ||||
`[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');` | `[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');` | ||||
@@ -259,7 +259,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)$ 的偏导 | > $\frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$: $J\left( \theta_0, \theta_1 \right)$ 的偏导 | ||||
公式中,学习速率决定了参数值变化的速率即”**走多少距离**“,而偏导这部分决定了下降的方向即”**下一步往哪里**“走(当然实际上的走多少距离是由偏导值给出的,学习速率起到调整后决定的作用),收敛处的局部最小值又叫做极小值,即”**陆地**“。 | 公式中,学习速率决定了参数值变化的速率即”**走多少距离**“,而偏导这部分决定了下降的方向即”**下一步往哪里**“走(当然实际上的走多少距离是由偏导值给出的,学习速率起到调整后决定的作用),收敛处的局部最小值又叫做极小值,即”**陆地**“。 | ||||
@@ -362,7 +362,7 @@ $$ | |||||
## 3.1 Matrices and Vectors | ## 3.1 Matrices and Vectors | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```matlab | ```matlab | ||||
% The ; denotes we are going back to a new row. | % The ; denotes we are going back to a new row. | ||||
@@ -415,7 +415,7 @@ A_23 = 6 | |||||
## 3.2 Addition and Scalar Multiplication | ## 3.2 Addition and Scalar Multiplication | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```matlab | ```matlab | ||||
% Initialize matrix A and B | % Initialize matrix A and B | ||||
@@ -482,7 +482,7 @@ add_As = | |||||
``` | ``` | ||||
## 3.3 Matrix Vector Multiplication | ## 3.3 Matrix Vector Multiplication | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```matlab | ```matlab | ||||
% Initialize matrix A | % Initialize matrix A | ||||
@@ -521,7 +521,7 @@ Av = | |||||
``` | ``` | ||||
## 3.4 Matrix Matrix Multiplication | ## 3.4 Matrix Matrix Multiplication | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```matlab | ```matlab | ||||
% Initialize a 3 by 2 matrix | % Initialize a 3 by 2 matrix | ||||
@@ -559,7 +559,7 @@ mult_AB = | |||||
``` | ``` | ||||
## 3.5 Matrix Multiplication Properties | ## 3.5 Matrix Multiplication Properties | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```matlab | ```matlab | ||||
% Initialize random matrices A and B | % Initialize random matrices A and B | ||||
@@ -628,7 +628,7 @@ BA = | |||||
``` | ``` | ||||
## 3.6 Inverse and Transpose | ## 3.6 Inverse and Transpose | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```matlab | ```matlab | ||||
% Initialize matrix A | % Initialize matrix A | ||||
@@ -8,7 +8,7 @@ | |||||
这里由于特征不再只有一个,引入一些新的记号 | 这里由于特征不再只有一个,引入一些新的记号 | ||||
> $n$: 特征的总数 | |||||
> $n$: 特征的总数 | |||||
> | > | ||||
> ${x}^{\left( i \right)}$: 代表样本矩阵中第 $i$ 行,也就是第 $i$ 个训练实例。 | > ${x}^{\left( i \right)}$: 代表样本矩阵中第 $i$ 行,也就是第 $i$ 个训练实例。 | ||||
> | > | ||||
@@ -473,8 +473,8 @@ $$ | |||||
> | > | ||||
> $L$: 第一行第一列为 $0$ 的 $n+1$ 维单位矩阵 | > $L$: 第一行第一列为 $0$ 的 $n+1$ 维单位矩阵 | ||||
Matlab/Octave 代码: | |||||
``` | |||||
Octave 代码: | |||||
```matlab | |||||
>> L = eye(5) | >> L = eye(5) | ||||
>> L(1,1) = 0 | >> L(1,1) = 0 | ||||
@@ -96,8 +96,6 @@ $h_\Theta(x) = a_1^{(3)} = g(\Theta_{10}^{(2)}a_0^{(2)} + \Theta_{11}^{(2)}a_1^{ | |||||
上面的计算过程被称为**前向传播(Forward propagation)**,即从输入层开始,一层一层地向下计算并传递结果。 | 上面的计算过程被称为**前向传播(Forward propagation)**,即从输入层开始,一层一层地向下计算并传递结果。 | ||||
再回顾一下逻辑回归: | 再回顾一下逻辑回归: | ||||
${h_\theta}\left( x \right)=g\left( {\theta_0}+{\theta_1}{x_1}+{\theta_{2}}{x_{2}}+{\theta_{3}}x_3 \right)$ | ${h_\theta}\left( x \right)=g\left( {\theta_0}+{\theta_1}{x_1}+{\theta_{2}}{x_{2}}+{\theta_{3}}x_3 \right)$ | ||||
@@ -221,9 +221,9 @@ $$ | |||||
说白了,这个技巧就是把多个矩阵转换为一个长长的向量,便于传入函数,之后再根据矩阵维度,转回矩阵即可。 | 说白了,这个技巧就是把多个矩阵转换为一个长长的向量,便于传入函数,之后再根据矩阵维度,转回矩阵即可。 | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```octave | |||||
```matlab | |||||
% 多个矩阵展开为一个向量 | % 多个矩阵展开为一个向量 | ||||
Theta1 = ones(11, 10); % 创建维度为 11 * 10 的矩阵 | Theta1 = ones(11, 10); % 创建维度为 11 * 10 的矩阵 | ||||
Theta2 = ones(2, 4) * 2; % 创建维度为 2 * 4 的矩阵 | Theta2 = ones(2, 4) * 2; % 创建维度为 2 * 4 的矩阵 | ||||
@@ -253,9 +253,9 @@ Theta2 = reshape(ThetaVec(111:118), 2, 4) | |||||
对于矩阵 $\Theta$,有 $\dfrac{\partial}{\partial\Theta_j}J(\Theta) \approx \dfrac{J(\Theta_1, \dots, \Theta_j + \epsilon, \dots, \Theta_n) - J(\Theta_1, \dots, \Theta_j - \epsilon, \dots, \Theta_n)}{2\epsilon}$ | 对于矩阵 $\Theta$,有 $\dfrac{\partial}{\partial\Theta_j}J(\Theta) \approx \dfrac{J(\Theta_1, \dots, \Theta_j + \epsilon, \dots, \Theta_n) - J(\Theta_1, \dots, \Theta_j - \epsilon, \dots, \Theta_n)}{2\epsilon}$ | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
```octave | |||||
```matlab | |||||
epsilon = 1e-4; | epsilon = 1e-4; | ||||
for i = 1:n, | for i = 1:n, | ||||
thetaPlus = theta; | thetaPlus = theta; | ||||
@@ -278,11 +278,11 @@ end | |||||
随机初始化权重矩阵也为实现细节之一,用于打破对称性(Symmetry Breaking),使得 $\Theta^{(l)}_{ij} \in [-\epsilon,\epsilon]$ 。 | 随机初始化权重矩阵也为实现细节之一,用于打破对称性(Symmetry Breaking),使得 $\Theta^{(l)}_{ij} \in [-\epsilon,\epsilon]$ 。 | ||||
Octave/Matlab 代码: | |||||
Octave 代码: | |||||
当然,初始权重的波动也不能太大,一般限定在极小值 $\epsilon$ 范围内,即 $\Theta^{(l)}_{i,j} \in [-\epsilon, \epsilon]$。 | 当然,初始权重的波动也不能太大,一般限定在极小值 $\epsilon$ 范围内,即 $\Theta^{(l)}_{i,j} \in [-\epsilon, \epsilon]$。 | ||||
```octave | |||||
```matlab | |||||
If the dimensions of Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11. | If the dimensions of Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11. | ||||
Theta1 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON; | Theta1 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON; | ||||