概论
逻辑回归
首先你需要输入特征 x,参数W 和b ,通过\(z = w^T x + b\)你就可以计算 出 z ,接下来使用\(a=σ(z)\)就可以计算出a。
我们将a的符号换为表示输出的 \(\hat{y}\),然后可以计算出损失函数\(ℒ(a,y)\),进而不断采用梯度下降法找到参数w和b的最优解。
采用这种算法编写的猫识别器最终的准确率只有70%,想要进一步提高识别的精准度,就需要建立起一个多层的神经网络来训练样本。 ### 基本神经网络结构
- 首先\(X\)表示输入特征,\(W\) 和 \(b\) 是参数,\(z^{[1]} = w^{[1]}X + b^{[1]}\)计算出 \(z^{[1]}\)。
- 使用\(x^{(i)}\)表示第 i 个训练样本,上标方括号 1、2 表示不同的层,图中[1]表示神经网络的第一层, [2]表示神经网络的第二层 。
- 类似逻辑回归,在计算\(z^{[1]}\)后需要使用\(σ(z^{[1]})\)计算 \(a^{[1]}\)
- 接下来你需要使用另外一个线 \(z^{[2]} = W^{[2]} a^{[1]} + b^{[2]}\)计算 \(z^{[2]}\),\(a^{[2]}= σ(z^{[2]})\)计算\(a^{[2]}\) ,此时\(a^{[2]}\) 就是整个神经网络最终的输出,用 𝑦表示网络的输出。
反向计算
神经网络表示
神经网络的符号惯例:
- \(x\) 表示输入特征
- \(a\) 表示每个神经元的输出, \(w\) 表示特征的权重,
- 上标表示神经网络的层数(隐藏层为 1),下标表示该层的第几个神经元。
结构
- 输入层
- 隐藏层(很好解释了之前在第一章的疑惑):在一个神经网络中,当你使用监督学习训练它的时候,训练集包含了输入 也包含了目标输出 ,所以术语隐藏层的含义是在训练集中,这些中间结点的准确值我们是不知道到的,也就是说你看不见它们在训练集中应具有的值。你能看见输入的值,你也能看见输出的值,但是隐藏层中的东西,在训练集中你是无法看到的。所以这也解释了词语隐藏层,只是表示你无法在训练集中看到他们。
- 简单点说,隐藏层就是把中间处理的过程隐藏起来而没有显性显示出来。
- 输出层
数据表示
- 隐藏层以及最后的输出层是带有参数的,参数个数与隐藏层单元/节点有关
- 传统上(两层的神经网络):输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。
- 技术上(三层的神经网络):因为这里有输入层、隐藏层,还有输出层。
神经网络的输出
* 注:\(z\)代表隐藏层,这里有两个隐藏层
多样本向量化
- 多个训练样本,则重复计算每个样本的4个方程(for循环)
- 利用向量化简化该过程
- 水平方向,这个垂直索引对应于神经网络中的不同的训练样本。
- 垂直方向,这个垂直索引对应于神经网络中的不同节点。
向 量 化 实 现 的 解 释
激活函数( Activation functions)
建立一个神经网络时,需要关心的一个问题是,在每个不同的独立层中应当采用哪种激活函数。
sigmoid函数
逻辑回归中,一直采用sigmoid函数作为激活函数,此外还有一些更好的选择。
tanh函数
表达式
\[tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}\]
函数图像
tanh(Hyperbolic Tangent Function,双曲正切函数)其实是sigmoid函数的移位版本。对于隐藏单元,选用tanh函数作为激活函数的话,效果总比sigmoid函数好,因为tanh函数的值在-1到1之间,最后输出的结果的平均值更趋近于0,而不是采用sigmoid函数时的0.5,这实际上可以使得下一层的学习变得更加轻松。
对于二分类问题,为确保输出在0到1之间,将仍然采用sigmiod函数作为输出的激活函数。
缺点
然而sigmoid函数和tanh函数都具有的缺点之一是,在z接近无穷大或无穷小时,这两个函数的导数也就是梯度变得非常小,此时梯度下降的速度也会变得非常慢。
线性修正单元(ReLU函数)
表达式
\[g(z) = max(0,z) =\begin{cases} 0, & \text{($z$ $\le$ 0)} \\ z, & \text{($z$ $\gt$ 0)} \end{cases}\]
函数图像
特点
当z大于0时是,ReLU函数的导数一直为1,所以采用ReLU函数作为激活函数时,随机梯度下降的收敛速度会比sigmoid及tanh快得多,但负数轴的数据都丢失了。
修正版本(Leaky-ReLU)
表达式 \[g(z) = max(0,z) =\begin{cases} \alpha z, & \text{($z$ $\le$ 0)} \\ z, & \text{($z$ $\gt$ 0)} \end{cases}\] 函数图像 其中\(\alpha\)是一个很小的常数,用来保留一部非负数轴的值。
注意
可以发现,以上所述的几种激活函数都是非线性的,原因在于使用线性的激活函数时,输出结果将是输入的线性组合,这样的话使用神经网络与直接使用线性模型的效果相当,此时神经网络就类似于一个简单的逻辑回归模型,失去了其本身的优势和价值。