一、感知机到神经网络?
输入层为第0层,隐藏层(中间层)为第1层,输出层为第2层,神经网络的连接方式与感知机并没有差异。
由公式:
y
=
{
0
,
w
1
x
1
+
w
2
x
2
+
b
≤
0
1
,
w
1
x
1
+
w
2
x
2
+
b
>
0
y=\begin{cases} 0,w_1x_1+w_2x_2+b\leq0\\ 1,w_1x_1+w_2x_2+b\gt0\\ \end{cases}
y={0,w1?x1?+w2?x2?+b≤01,w1?x1?+w2?x2?+b>0? b是被称为 偏置的参数,用于控制神经元被激活的容易程度,而
w
1
,
w
2
w_1,w_2
w1?,w2?表示各个信号的权重的参数,用于控制各个信号的重要性。引入h(x),则式子改写为
y
=
h
(
b
+
w
1
x
1
+
w
2
x
2
)
y=h(b+w_1x_1+w_2x_2)
y=h(b+w1?x1?+w2?x2?)
h
(
x
)
=
{
0
,
(
x
≤
0
)
1
,
(
x
>
0
)
h(x)=\begin{cases} 0,(x\leq0)\\1,(x>0)\\\end{cases}
h(x)={0,(x≤0)1,(x>0)?这里的h(x)函数将输入信号的总和转换为输出信号,这种函数叫激活函数,在进一步改写,先计算输入信号加权总和,然后用激活函数转换这一总和。
a
=
b
+
w
1
x
1
+
w
2
x
2
a=b+w_1x_1+w_2x_2
a=b+w1?x1?+w2?x2?
y
=
h
(
a
)
y=h(a)
y=h(a) 上图中,信号加权总和为节点a,该节点被激活函数
h
(
x
)
h(x)
h(x)转化为节点y。
二、激活函数?
函数以阈值为界,一旦输入超过阈值,就切换输出,这样的函数叫“阶跃函数”。感知机使用阶跃函数作为激活函数,如果将激活函数从阶跃函数换成其他函数,就可以进人神经网络的世界了。
2.1sigmoid函数
h
(
x
)
=
1
1
+
e
x
p
(
?
x
)
h(x)=\frac{1}{1+exp(-x)}
h(x)=1+exp(?x)1?函数就是给定某个输人后,会返回某个输出的转换器,类似h(1.0) = 0.731… h(2.0) = 0.88…这样。神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送给下一个神经兀 sigmoid 函数是一条平滑的曲线,输出随着输人发生连续性的变化,神经网络中流动的是连续的实数值信号。
2.2阶跃函数
当输人超过0时,输出1,否则输出0
阶跃函数以0为界,输出从0切换为1(或者从1切换为0)。它的值呈阶梯式变化(急剧性变化),所以称为阶跃函数。感知机中神经元之间流动的是0或1的二元信号。
总结:
两个函数共同性质:它们具有相似的形状;输入信号重要时,两个函数输出值都较大,输入不重要时,输出都比较小;输出值限定在0到1之间;两个函数都是非线性函数。 神经网络的激活函数只能使用非线性函数。使用线性函数,不管加多少层,总是存在与之等效的无隐藏层的神经网络。例子见https://blog.csdn.net/Freddyfang/article/details/119758840
2.3.ReLU函数
ReLU函数在输入大于0时,直接输出该值;在输人小于等于0时,输出0 公式为:
h
(
x
)
=
{
x
,
(
x
≤
0
)
0
,
(
x
>
0
)
h(x)=\begin{cases} x,(x\leq0)\\0,(x>0)\\\end{cases}
h(x)={x,(x≤0)0,(x>0)?
三、神经网络组成?
神经网络可以看作由多个感知机组成,如图
四、神经网络内积
输入量为
X
=
[
x
1
,
x
2
]
X=[x_1,x_2]
X=[x1?,x2?],输出量为
Y
=
[
y
1
,
y
2
,
y
3
]
Y=[y_1,y_2,y_3]
Y=[y1?,y2?,y3?],权值为
W
=
[
1
3
5
2
4
6
]
W=\begin{bmatrix} 1 & 3 & 5\\ 2 & 4 &6\end{bmatrix}
W=[12?34?56?]
用矩阵写出该神经网络:
Y
=
X
W
Y=XW
Y=XW
假设输入矩阵
A
=
[
2
,
4
]
,
W
=
[
1
3
5
2
4
6
]
,
A=[2,4],W=\begin{bmatrix} 1 & 3 & 5\\ 2 & 4 &6\end{bmatrix},
A=[2,4],W=[12?34?56?],所以输出矩阵为
Y
=
[
y
1
,
y
2
,
y
3
]
=
[
10
,
22
,
34
]
Y=[y_1,y_2,y_3]=[10,22,34]
Y=[y1?,y2?,y3?]=[10,22,34],矩阵
Y
Y
Y为两个矩阵的内积。
import numpy as np
arr1=np.array([2,4])
arr2=np.array([1,3,5],[2,4,6])
arr3=np.dot(arr1,arr2)
print(arr3)
|