diff --git a/机器学习/吴恩达深度学习/学习笔记/Neural_Networks_and_Deep_Learning/01神经网络基础.md b/机器学习/吴恩达深度学习/学习笔记/Neural_Networks_and_Deep_Learning/01神经网络基础.md index cf8c0372..4e3d0ffc 100644 --- a/机器学习/吴恩达深度学习/学习笔记/Neural_Networks_and_Deep_Learning/01神经网络基础.md +++ b/机器学习/吴恩达深度学习/学习笔记/Neural_Networks_and_Deep_Learning/01神经网络基础.md @@ -1,68 +1,85 @@ # 神经网络基础 +> 介绍神经网络的编程基础。看完视频,在总结这一部分。每一个视频,完成开始做笔记。 + +## 识别图片上的猫 + +### 问题定义 +* 场景定义:监督学习。图像识别领域。非结构化数据输入。 +* 问题定义:分类问题。 +* 算法定义:logistics回归。 + +### 问题描述 +* 输入的特征向量:$x \in R^{n_x}$,其中 ${n\_x}$是特征数量; +* 输出的标签,用于训练的标签:$y \in 0,1$ +* 训练集:$\{(x^{(1)},y^{(1)}),\dots,(x^{(m)},y^{(m)})\}$紧凑矩阵表示训练集。约定使用列向量。 -## Logistic 回归 +## Logistic回归 -Logistic 回归是一个用于二分分类的算法。 +> Logistic 回归是一个用于二分分类的算法。 -Logistic 回归中使用的参数如下: +### 模型定义-假设函数 -* 输入的特征向量:$x \in R^{n\_x}$,其中 ${n\_x}$是特征数量; -* 用于训练的标签:$y \in 0,1$ * 权重:$w \in R^{n\_x}$ * 偏置: $b \in R$ * 输出:$\hat{y} = \sigma(w^Tx+b)$ -* Sigmoid 函数:$$s = \sigma(w^Tx+b) = \sigma(z) = \frac{1}{1+e^{-z}}$$ +* Sigmoid 函数: +$$s = \sigma(w^Tx+b) = \sigma(z) = \frac{1}{1+e^{-z}}$$ -为将 $w^Tx+b$ 约束在 [0, 1] 间,引入 Sigmoid 函数。从下图可看出,Sigmoid 函数的值域为 [0, 1]。 +> 将 $w^Tx+b$ 约束在 [0, 1] 间,引入 Sigmoid 函数。从下图可看出,Sigmoid 函数的值域为 [0, 1]。 ![sigmoid-function](sigmoid-function.png) -Logistic 回归可以看作是一个非常小的神经网络。下图是一个典型例子: +### Logistic => 神经网络 ![LogReg_kiank](LogReg_kiank.png) -### 损失函数 +## 损失函数和代价函数 -**损失函数(loss function)**用于衡量预测结果与真实值之间的误差。 +### 损失函数(loss function)和代价函数(cost function) -最简单的损失函数定义方式为平方差损失:$$L(\hat{y},y) = \frac{1}{2}(\hat{y}-y)^2$$ +* 用于衡量预测结果与真实值之间的误差。最简单的损失函数定义方式为平方差损失: -但 Logistic 回归中我们并不倾向于使用这样的损失函数,因为之后讨论的优化问题会变成非凸的,最后会得到很多个局部最优解,梯度下降法可能找不到全局最优值。 +$$L(\hat{y},y) = \frac{1}{2}(\hat{y}-y)^2$$ -一般使用$$L(\hat{y},y) = -(y\log\hat{y})-(1-y)\log(1-\hat{y})$$ +* 但 Logistic 回归中我们并不倾向于使用这样的损失函数,因为之后讨论的优化问题会变成非凸的,最后会得到很多个局部最优解,梯度下降法可能找不到全局最优值。一般使用 -损失函数是在单个训练样本中定义的,它衡量了在**单个**训练样本上的表现。而**代价函数(cost function,或者称作成本函数)**衡量的是在**全体**训练样本上的表现,即衡量参数 w 和 b 的效果。 +$$L(\hat{y},y) = -(y\log\hat{y})-(1-y)\log(1-\hat{y})$$ + +* 损失函数是在单个训练样本中定义的,它衡量了在**单个**训练样本上的表现。而**代价函数(cost function,或者称作成本函数)**衡量的是在**全体**训练样本上的表现,即衡量参数 w 和 b 的效果。 $$J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})$$ ## 梯度下降法(Gradient Descent) -函数的**梯度(gradient)**指出了函数的最陡增长方向。即是说,按梯度的方向走,函数增长得就越快。那么按梯度的负方向走,函数值自然就降低得最快了。 +* 函数的 **梯度(gradient)** 指出了函数的最陡增长方向。即是说,按梯度的方向走,函数增长得就越快。那么按梯度的负方向走,函数值自然就降低得最快了。 -模型的训练目标即是寻找合适的 w 与 b 以最小化代价函数值。简单起见我们先假设 w 与 b 都是一维实数,那么可以得到如下的 J 关于 w 与 b 的图: +* 模型的训练目标即是寻找合适的 w 与 b 以最小化代价函数值。简单起见我们先假设 w 与 b 都是一维实数,那么可以得到如下的 J 关于 w 与 b 的图: ![cost-function](cost-function.png) -可以看到,成本函数 J 是一个**凸函数**,与非凸函数的区别在于其不含有多个局部最低点;选择这样的代价函数就保证了无论我们初始化模型参数如何,都能够寻找到合适的最优解。 +* 可以看到,成本函数 J 是一个**凸函数**,与非凸函数的区别在于其不含有多个局部最低点;选择这样的代价函数就保证了无论我们初始化模型参数如何,都能够寻找到合适的最优解。 -参数 w 的更新公式为: +### 计算过程 +* 参数 w 的更新公式为: $$w := w - \alpha\frac{dJ(w, b)}{dw}$$ -其中 α 表示学习速率,即每次更新的 w 的步伐长度。 +* 其中 α 表示学习速率,即每次更新的 w 的步伐长度。当 w 大于最优解 w′ 时,导数大于 0,那么 w 就会向更小的方向更新。反之当 w 小于最优解 w′ 时,导数小于 0,那么 w 就会向更大的方向更新。迭代直到收敛。 -当 w 大于最优解 w′ 时,导数大于 0,那么 w 就会向更小的方向更新。反之当 w 小于最优解 w′ 时,导数小于 0,那么 w 就会向更大的方向更新。迭代直到收敛。 - -在成本函数 J(w, b) 中还存在参数 b,因此也有: +* 在成本函数 J(w, b) 中还存在参数 b,因此也有: $$b := b - \alpha\frac{dJ(w, b)}{db}$$ ## 计算图(Computation Graph) -神经网络中的计算即是由多个计算网络输出的前向传播与计算梯度的后向传播构成。所谓的 **反向传播(Back Propagation)** 即是当我们需要计算最终值相对于某个特征变量的导数时,我们需要利用计算图中上一步的结点定义。 +* 由各个算子表示的节点构成的计算过程图形。 +* 前向传播:通过自左向右的执行计算图,能够计算一个函数的值。 +* 后向传播:通过自右向左的执行计算图,计算导数,遵循链式法则。 + +![](2020-10-14-14-20-07.png) ## Logistic 回归中的梯度下降法 diff --git a/机器学习/吴恩达深度学习/学习笔记/Neural_Networks_and_Deep_Learning/2020-10-14-14-20-07.png b/机器学习/吴恩达深度学习/学习笔记/Neural_Networks_and_Deep_Learning/2020-10-14-14-20-07.png new file mode 100644 index 00000000..d2a72af8 Binary files /dev/null and b/机器学习/吴恩达深度学习/学习笔记/Neural_Networks_and_Deep_Learning/2020-10-14-14-20-07.png differ