反向传播算法

This commit is contained in:
yinkanglong_lab
2020-10-10 04:01:47 +08:00
parent ee523c4a62
commit b918a68c2a
17 changed files with 156 additions and 11 deletions

View File

@@ -23,7 +23,7 @@
10.4
上午 完成13-14
下午 完成15-16
晚上 完成27-29
晚上 完成17-19
-----------------
10.5 机器学习基石上完成

View File

@@ -17,6 +17,7 @@
## 学习路线
### Python系列一周
> 熟悉python进行机器学习的基础库包括每个库都干了什么。
python3-numpy-scipy-matplotlib-pandas√
> 基本完成。主要是知道了这些东西都是干什么用的。
@@ -26,21 +27,24 @@ python3-numpy-scipy-matplotlib-pandas√
1. 《机器学习》吴恩达的课程一看。跟着做做笔记。
* 完成第一轮,笔记对照(看一部分,总结一部分。)
* 看吴恩达的PPT重新整理所有的笔记。
* 寻找吴恩达课程的课后题使用python完成课后题
2. 《机器学习基石》上&下//李宏毅的机器学习也行
* 完成第二轮,笔记对照(跟上实践)
3. 《统计学习方法》一看。3Blue1Brown的视频看一看。跟着做做笔记。
4. 《机器学习西瓜书》一看。跟着做做笔记。
5. 《机器学习实战》量子位提供的书,适合编程。
6. tensorflow教程一看实现一遍之前的算法。
6. 《python机器学习》里边涉及几个实战
7. tensorflow教程一看实现一遍之前的算法。
### 安排
1. 首先跟着量子位的课程完成上述学习。
2. 然后跟着apacheCN的资料完成第二阶段的阅读。
3. 然后就是尝试专业领域的应用实战。
> 安排
> 1. 首先跟着量子位的课程完成上述学习。
> 2. 然后跟着apacheCN的资料完成第二阶段的阅读。
> 3. 然后就是尝试专业领域的应用实战。
> 补充:林轩田《机器学习基石》《机器学习技法》。李宏毅的《机器学习视频教程》。
工具
* sklearn
* tensorflow
> * sklearn
> * tensorflow
### 深度学习系列(一周)
吴恩达的神经网络五套课程看完。

View File

@@ -18,4 +18,7 @@
## 第五周9.28-10.4
* 吴恩达课程完成。
* 机器学习相关工具的熟练。
* 机器学习相关工具的熟练。
* 完成了张小玉部分的界面。
##

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 KiB

View File

@@ -17,4 +17,14 @@
用事件发生的频率 作为 事件发生的概率。本质上是一种机器学习。通过计算在此大小、年龄下恶性的概率,可以得到某些年龄段的的概率分布。与概率一一对应。
但机器学习,是不需要直接计算概率的。
但机器学习,是不需要直接计算概率的。
## 涉及到的数学知识
<ul>
<li><b>线性代数</b>:矩阵/张量乘法、求逆,奇异值分解/特征值分解,行列式,范数等</li>
<li><b>统计与概率</b>:概率分布,独立性与贝叶斯,最大似然(MLE)和最大后验估计(MAP)等</li>
<li><b>信息论</b>:基尼系数,熵(Entropy)等</li>
<li><b>优化</b>:线性优化,非线性优化(凸优化/非凸优化)以及其衍生的求解方法如梯度下降、牛顿法、基因算法和模拟退火等</li>
<li><b>数值计算</b>:上溢与下溢,平滑处理,计算稳定性(如矩阵求逆过程)</li>
<li><b>微积分</b>:偏微分,链式法则,矩阵求导等</li>
</ul>

View File

@@ -1,6 +1,7 @@
## 过拟合
### 偏差
* bias
### 方差
### 过拟合
@@ -14,4 +15,32 @@
### 解决办法
* 减少特征的数量
* 对特征进行正则化。
* 对特征进行正则化。
## 正则化
* 代价函数加入正则化的数据项,用来缩小每一个参数。
* 现行回归的正则化代价函数
$$
J(\theta) = \frac{1}{2m}[\sum_1^m(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum_1^n\theta^2_j]
$$
* 逻辑回归的正则化,二者一致。
$$
J(\theta)=-\frac{1}{m}[\sum_i^my^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log (1-h_\theta (x^{(i)}))]+\frac{\lambda}{2m}\sum_1^n\theta_j^2
$$
## 编程任务
### 线性回归
* 添加,高阶的编程项.
* 对参数进行正则化,并对比正则化前后假设函数的不同。
* 需要绘制,拟合过程参数变化率(梯度下降速度。
* 需要绘制,拟合完成后假设函数(假设函数的最终形状。判断是否过拟合。
### 逻辑回归
* 添加,高阶的编程项.
* 对参数进行正则化,并对比正则化前后假设函数的不同。
* 需要绘制,拟合过程参数变化率(梯度下降速度。
* 需要绘制,拟合完成后假设函数(假设函数的最终形状。判断是否过拟合。

View File

@@ -0,0 +1,41 @@
## 非线性假设
* 当特征很多时,如果包含各种高阶项,特征空间会爆炸。
* 在非线性空间中,使用逻辑回归进行分类,会导致特征空间过多。
## 神经网络
### 相关术语
* input layer输入层
* output layer输出层
* bias unit 偏置单元
* sigmod、logistic activation function激活函数
* $\theta$模型参数=模型权重
## 模型展示
* 神经网络本身是机器学习的一个假设函数。
* 使用数学计算能够表示神经网络的计算过程。即计算给定输入后,计算神经网络的输出值。
* 使用向量化的计算方法,计算神经网络的前向传播过程。
## 实例
![](../img/Z5OY52BXMF[@BB@ITAVIZ}6.png)
* 使用神经网络表示逻辑运算。
* sigmod算子。+-10+-20
## 计算向量化
* 普通计算向量化
* 多组数据矩阵化
> * 使用向量,来表示计算过程。使用矩阵来表示多组数据的计算过程。
> * 在线性回归和逻辑回归当中,多组输入向量,乘,固定的参数向量,等于,输出向量。
> * 在神经网络中,一组输入向量,乘,多组参数向量,等于,输出向量。
> * 下标用来表示矩阵和向量中的元素位置。上标表示迭代的代数。
## 编程任务:使用神经网络进行多元分类
* 寻找图片的数据集。
* 区分不同的交通工具

View File

@@ -0,0 +1,58 @@
## 假设函数
* 神经网络本身,即是假设函数能够计算输入相对的输出。
## 代价函数
* $L$表示神经网络的总层数。
* $s_L$表示第L层单元的个数。
* $K$表示输出层单元的个数
* 代价函数相当于第i组数据输入时产生的误差。
$$
J(\theta)=-\frac{1}{m}[\sum_i^my^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log (1-h_\theta (x^{(i)}))]+\frac{\lambda}{2m}\sum_1^n\theta_j^2
$$
* $a^{(i)}$表示第i层的单元值。
* $\Theta^{(i)}$第i层的权重
* $z^{(i)}$第i层的加权值
* $\delta^{(i)}$第i层的反向传播误差。
## 最小化代价函数:反向传播算法
* 在这里的上标,代表的不是输入的代数(即第几次迭代),而是神经网络的层数。下标表示的是神经网络某层的单元数。
* 原理:神经网络的值会随着假设函数正向传播。神经网络的误差会随着假设函数反向传播到第二层。利用每一层的单元值和神经网络的误差能够计算每一层的梯度下降向量,通过梯度下降向量,完成参数的更新。
* 神经网络的正向传播过程
![](../img/forward.png)
* 神经网络的反向传播过程
![](../img/backward.png)
* 神经网络反向传播算法实现
![](../img/backwark_过程.png)
## 反向传播算法理解
* $\delta_j^{(i)}$表示第i层的单元j的误差。他相当于单元j的代价函数$J=cost_j$关于加权值$z^{(i)}_j$的偏导数
$$
\delta_j^{(i)}=\frac{\partial}{\partial z}cost_j
$$
![](../img/backward_原理.png)
## 梯度检测
* 使用差分方法,近似某个点的梯度。普通的梯度是通过求导公式得到导数,然后进行梯度下降。可以使用差分近似导数,与梯度进行对比,完成梯度检测。
## 权重随机初始化
* 避免权重相同,出现高度冗余。
* 因为在梯度下降更新过程中,相同的权重,会进行相同程度的更新。
* 打破对称性流程