对于感知机相关内容,可以参考我上一篇文章:
https://blog.csdn.net/Raine_Yang/article/details/128461600?spm=1001.2014.3001.5501
在图示中,最左边一列为输入层,最右边一列为输出层,中间为中间层,也叫隐藏层。一般把输入层到输出层以此称为第0层,第1层,第2层等
对于感知机,我们将输入和权重乘积相加并和阈值比较,阈值又可以表示为偏置b,及比较 x1w1 + x2w2 + b = 0 我们可以用一个函数表示以下式子,即
y = h(b + w1x1 + w2x2)
函数h的定义为当x <= 0时h(x) = 0,当x > 0时h(x) = 1。函数h被称为激活函数(activation function)
激活函数:
感知机使用一个阶梯函数,当输入达到某一阈值时输出1,否则输出0。不过如果我们将激活函数换为别的函数,我们就创建了神经网络
1 sigmoid函数
表达式:y = 1 / (1 + e ^ -x)
绘制:
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype = int)
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # the range of y-axis
plt.show()
sigmoid函数为连续函数,且各点都可求导。该函数定义域为全体实数,值域为(0, 1),在输入很小时,输出趋近于0,在输入很大时,输出趋近于1,这一点和阶梯函数类似
阶梯函数和sigmoid函数都输入线性函数。线性函数即为 y = kx表达式。神经网络只有使用非线性函数作为激活函数时加深层数才有意义。(如果使用线性函数 y = kx,三层神经网络 y(y(y(x))) 无异于一层 y = k ^ 3 * x)
2 ReLU (Rectified Linear Unit)
ReLU函数在输入大于0时直接输出输入值,在输入小于等于0时输出0
绘制:
import numpy as np
import matplotlib.pylab as plt
def ReLU(x):
return np.maximum(0, x)
x = np.arange(-5.0, 5.0, 0.1)
y = ReLU(x)
plt.plot(x, y)
plt.show()
矩阵乘法
矩阵乘法通过坐标行和右边列相乘。如图,新矩阵1行1列为A第1行和B第1列相乘,1行2列为A第1行和B第2列相乘。
注意两个矩阵如果要相乘第一个矩阵第1维元素个数(列数)要和第二个矩阵第0维元素个数(行数)相等。如2 x 3矩阵可以和 3 x 2矩阵相乘,但不可和1 x 2矩阵相乘
c = np.array([[1, 2, 3], [4, 5, 6]])
d = np.array([[1, 2], [3, 4], [5, 6]])
np.dot(c, d)
在python中使用np.dot(a, b)计算矩阵乘法