深度学习

时间:2024-05-23 11:37:30

1 **函数

1.1 阶跃函数

python代码实现:

def step_function(x):
	y = x > 0
	return y.astype(np.int)  

对NumPy数组进行不等号运算后 ,数组的各个元素生成一个布尔型数组。
astype()方法转换NumPy数组的类型,数组y的元素类型从布尔型转换为int型。
深度学习

图1 阶跃函数的图形

1.2 sigmoid 函数

sigmoid 函数数学公式:
h(x)=11+ex h(x)=\frac{1}{1+e^{-x}}
python代码实现:

def sigmoid(x):
	return 1 / (1 + np.exp(-x))

深度学习

图2 sigmoid 函数的图形

1.3 ReLU函数

ReLU:Rectified Linear Unit

sigmoid 函数数学公式:
f(x)={x(x>0)y(x<0) f(x)=\left\{ \begin{aligned} x & & (x>0)\\ y & & (x<0) \\ \end{aligned} \right.
python代码实现:

def relu(x):
    return np.maximum(0, x)

深度学习

图3 ReLU函数的图形

2 三层神经网络的实现

2.1 神经网络 符号含义

深度学习

图4 权重的符号

2.2 各层间信号传递的实现

深度学习

图5 从输入层到第1层的信号传递

神经元“1”表示偏置,其右下角的索引号只有一个。这是因为前一层的偏置神经元(神经元“1”)只有一个。

用数学式表示a1(1)a1^{(1)},通过加权信号和偏置的和按如下方式进行计算
a1(1)=w11(1)x1+w12(1)x2+b1(1)a1^{(1)}=w11^{(1)}x1+w12^{(1)}x2+b1^{(1)} 使用矩阵的乘法运算,则可以将第1层的加权和表示成下面的式子
A(1)=XW(1)+B(1)A^{(1)}=XW^{(1)}+B^{(1)}

其中A(1)A^{(1)}XXB(1)B^{(1)}W(1)W^{(1)}、如下所示。

A(1)=(a1(1)a2(1)a3(1))A^{(1)}=\begin{pmatrix}a1^{(1)} & a2^{(1)} & a3^{(1)}\end{pmatrix}X=(x1x2)X=\begin{pmatrix}x_{1} & x_{2}\end{pmatrix}B(1)=(b1(1)b2(1)b3(1))B^{(1)}=\begin{pmatrix}b1^{(1)} & b2^{(1)} & b3^{(1)}\end{pmatrix},

W(1)=(w11(1)w21(1)w31(1)w11(1)w21(1)w31(1))W^{(1)}=\begin{pmatrix} w_{11}^{(1)} & w_{21}^{(1)} &w_{31}^{(1)} \\ w_{11}^{(1)} & w_{21}^{(1)} &w_{31}^{(1)} \end{pmatrix}

深度学习

图6 从输入层到第1层的信号传递

aa表示隐藏层的加权和(加权信号和偏置的总和)
zz表示**函数转换后的信号
h()h() 表示**函数,这里使用sigmoid 函数

深度学习

图7 第1层到第2层的信号传递

深度学习

图8 从第2层到输出层的信号传递

这里使用identity_function()恒等函数作为输出层的**函数,记为σ()σ()

三层网络python代码实现:

import numpy as np

def sigmoid(x):
	return 1 / (1 + np.exp(-x))

def identity_function(x):
	return x

def init_network():
	network = {}
	network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
	network['b1'] = np.array([0.1, 0.2, 0.3])
	network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
	network['b2'] = np.array([0.1, 0.2])
	network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
	network['b3'] = np.array([0.1, 0.2])

	return network

def forward(network, x):
	W1, W2, W3 = network['W1'], network['W2'], network['W3']
	b1, b2, b3 = network['b1'], network['b2'], network['b3']

	a1 = np.dot(x, W1) + b1
	z1 = sigmoid(a1)
	a2 = np.dot(z1, W2) + b2
	z2 = sigmoid(a2)
	a3 = np.dot(z2, W3) + b3
	y = identity_function(a3) # 或者Y = A3

	return y

network = init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y) # [ 0.31682708 0.69627909]

softmax函数
公式如下: