跳转至

第3章 神经网络

神经网络的一个主要性质是它可以自动地从数据中学习到合适的权重参数

3.1 从感知机到神经网络

3.2 激活函数

感知机使用的是阶跃函数。 阶跃函数:以阈值为界,一旦输入超过阈值,就切换输出。

\[ h(x)=\left\{\begin{array}{ll} 0 & (x \leqslant 0) \\ 1 & (x>0) \end{array}\right. \]

3.2.1 sigmoid函数

\[ h(x)=\frac{1}{1 + exp(-x)} \]
\[ exp(-x) = e^{-x} \]

3.2.3 阶跃函数的图形

3.2.4 sigmoid函数的实现

3.2.5 sigmoid函数和阶跃函数的比较

感知机流动是的 0 / 1的二元信号 神经网络流动的是连续的实数值信号

3.2.6 非线性函数

阶跃和sigmoid函数为非线性函数

线性函数是一条笔直的直线,形如一次函数(c为常数):

\[ h(x) = cx \]

3.2.7 ReLU函数

Rectified Linear Unit

\[ h(x)=\left\{\begin{array}{ll} x & (x > 0) \\ 0 & (x \leqslant 0) \end{array}\right. \]

3.3 多维数组的运算

run到线性代数..... 待学...

3.3.3 神经网络的内积

点积操作将向量 X 和矩阵 W 进行乘法运算,结果是一个新的向量 Y,其每个元素是 X 的元素与 W 对应列的元素的乘积之和。通过 np.dot 函数,NumPy 可以高效地进行这种计算。

这个神经网络省略了偏置和激活函数,只有权重

X = np.array([1, 2])
X.shape
#(2,)

W = np.array([[1, 3, 5], [2, 4, 6]])
print(W)

W.shape
#[[1 3 5]
 #[2 4 6]]
#(2, 3)

#点积
Y = np.dot(X, W)

print(Y)
#[ 5 11 17]

3.4 3层神经网络的实现

实现从输入到输出的(前向)处理

前向:数据通过模型或算法的过程,从输入到输出的整个处理流程。

\[ a_{1}^{(1)}=w_{11}^{(1)} x_{1}+w_{12}^{(1)} x_{2}+b_{1}^{(1)} \]
\[ A^{(1)} = (a_{1}^{(1)} \quad a_{2}^{(1)} \quad a_{3}^{(1)}) \]
\[ X = (x_{1} \quad x_{2}) \]
\[ B^{(1)} = (b_{1}^{(1)} \quad b_{2}^{(1)} \quad b_{3}^{(1)}) \]
\[ \boldsymbol{W}^{(1)} = \left(\begin{array}{ccc} w_{11}^{(1)} & w_{21}^{(1)} & w_{31}^{(1)} \\ w_{12}^{(1)} & w_{22}^{(1)} & w_{32}^{(1)} \end{array}\right) \]

3.5 输出层的设计

一般而言,回归问题用恒等函数,分类问题用softmax函数。 回归:房价预测 分类:判断是什么种类

3.5.1 恒等函数和softmax函数

恒等函数——原封不动输出

softmax函数

\[ y_k = \frac{\exp(a_k)}{\sum_{i=1}^{n} \exp(a_i)} \]

输出层的各个神经元都受到所有输入信号的影响。

def softmax(a):
    C = np.max(a)
    exp_a = np.exp(a - c) #防止溢出
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a

    return y

softmax函数的输出为“概率”,总和为1

3.5.4 输出层的神经元数量

数量根据问题需要的输出来决定。识别数字有0-10,10个类别,那就设置输出层的神经元为10个

3.6 手写数字识别