1.从感知机到神经网络
将
y
=
{
0
(
w
1
x
1
+
w
2
x
2
+
b
≤
0
)
1
(
w
1
x
1
+
w
2
x
2
+
b
>
0
)
y=\left\{ \begin{aligned} 0\ \ \ \ (w_1x_1+w_2x_2+b\le0)\\ 1\ \ \ \ (w_1x_1+w_2x_2+b>0)\\ \end{aligned} \right.
y={0 (w1x1+w2x2+b≤0)1 (w1x1+w2x2+b>0)进一步简化,得到:
y
=
h
(
b
+
w
1
x
1
+
w
2
x
2
)
y = h(b+w_1x_1+w_2x_2)
y=h(b+w1x1+w2x2),其中
h
(
x
)
=
{
0
(
x
≤
0
)
1
(
x
>
0
)
h(x)=\left\{ \begin{aligned} 0 \ \ \ (x\le0)\\ 1 \ \ \ (x>0) \end{aligned} \right.
h(x)={0 (x≤0)1 (x>0)
这里
h
(
x
)
h(x)
h(x)即被称作激活函数,上面选择的是阶跃函数。
2.激活函数
2.1 s i g m o i d sigmoid sigmoid函数
定义:
h
(
x
)
=
1
1
+
e
−
x
h(x)=\frac {1}{1+e^{-x}}
h(x)=1+e−x1
实现:
def sigmoid(x):
return 1/(1+np.exp(x))
2.2阶跃函数
实现:
def step_function(x):
y = x>0
return y.astype(np.int)
2.3 R e L U ReLU ReLU函数
定义:
h
(
x
)
=
{
x
(
x
>
0
)
0
(
x
≤
0
)
h(x)=\left\{ \begin{aligned} x \ \ (x>0)\\ 0 \ \ (x\le0) \end{aligned} \right.
h(x)={x (x>0)0 (x≤0)
实现:
def relu(x):
return np.maximum(x, 0)
3.神经网络的内积
如图所示的神经网络:
x
1
x_1
x1对
y
1
,
y
2
,
y
3
y_1,y_2,y_3
y1,y2,y3的权重分别为
1
,
3
,
5
1,3,5
1,3,5,
x
2
x_2
x2对
y
1
,
y
2
,
y
3
y_1,y_2,y_3
y1,y2,y3的权重分别为
2
,
4
,
6
2,4,6
2,4,6,那么信号传递到
y
1
,
y
2
,
y
3
y_1,y_2,y_3
y1,y2,y3就分别应为:
y
1
=
x
1
⋅
1
+
x
2
⋅
2
y
2
=
x
1
⋅
3
+
x
2
⋅
4
y
1
=
x
1
⋅
5
+
x
2
⋅
6
y_1=x_1 \cdot 1+x_2 \cdot 2\\ y_2=x_1 \cdot 3+x_2 \cdot 4\\ y_1=x_1 \cdot 5+x_2 \cdot 6
y1=x1⋅1+x2⋅2y2=x1⋅3+x2⋅4y1=x1⋅5+x2⋅6
用矩阵表示为:
(
y
1
y
2
y
3
)
=
(
x
1
x
2
)
⋅
(
1
3
5
2
4
6
)
\begin{pmatrix} y_1 & y_2 & y_3 \end{pmatrix}= \begin{pmatrix} x_1 & x_2 \end{pmatrix} \cdot \begin{pmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{pmatrix}
(y1y2y3)=(x1x2)⋅(123456)
用
n
u
m
p
y
numpy
numpy实现:
x = np.array([1, 2])
w = np.array([[1,3,5],[2,4,6]])
y = np.dot(x, w)
4.输出层的设计
s o f t m a x softmax softmax函数
定义:
y
k
=
e
a
k
∑
i
=
1
n
e
a
i
y_k=\frac{e^{a_k}}{\sum\limits_{i=1}^ne^{a_i}}
yk=i=1∑neaieak
实现:
def softmax(a):
c = np.max(a)
exp_a = np.exp(a - c) #防止溢出
exp_sum = np.sum(exp_a)
y = exp_a/exp_sum
return y