第三章-浅层神经网络

概论

逻辑回归

mark 中间层的隐藏单元中的计算 首先你需要输入特征 x,参数W 和b ,通过\(z = w^T x + b\)你就可以计算 出 z ,接下来使用\(a=σ(z)\)就可以计算出a。

我们将a的符号换为表示输出的 \(\hat{y}\),然后可以计算出损失函数\(ℒ(a,y)\),进而不断采用梯度下降法找到参数w和b的最优解。

采用这种算法编写的猫识别器最终的准确率只有70%,想要进一步提高识别的精准度,就需要建立起一个多层的神经网络来训练样本。 ### 基本神经网络结构 mark

  • 首先\(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循环)
  • 利用向量化简化该过程 mark
  • 水平方向,这个垂直索引对应于神经网络中的不同的训练样本。
  • 垂直方向,这个垂直索引对应于神经网络中的不同节点。

向 量 化 实 现 的 解 释

激活函数( Activation functions)

建立一个神经网络时,需要关心的一个问题是,在每个不同的独立层中应当采用哪种激活函数。

sigmoid函数

逻辑回归中,一直采用sigmoid函数作为激活函数,此外还有一些更好的选择。

tanh函数

表达式

\[tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}\]

函数图像

mark 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}\]

函数图像

mark

mark

特点

当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}\] 函数图像 mark 其中\(\alpha\)是一个很小的常数,用来保留一部非负数轴的值。

注意

可以发现,以上所述的几种激活函数都是非线性的,原因在于使用线性的激活函数时,输出结果将是输入的线性组合,这样的话使用神经网络与直接使用线性模型的效果相当,此时神经网络就类似于一个简单的逻辑回归模型,失去了其本身的优势和价值。

代码

参考资料