神经网络常见的相关函数
0.感知机感知机是深度学习的基础,指的一种感知函数,通常可由输入值与判断函数构成
#3.3 与非门感知机
def NAND(x1,x2):
x = np.array([x1,x2])
w = np.array([-0.5, -0.5])
b = 0.6
tmp = np.sum(x*w) + b
if tmp <= 0:
return 0
else:
return 1
##3.4 多层感知机结合:异或门
def XOR(x1, x2):
S1 = NAND(x1,x2)
S2 = OR(x1,x2)
return AND(S1,S2)
print('多层感知机:',XOR(1,0))
关于深度学习神经层数: 每一层感知点(即图中的圆圈),用来模拟大脑中的神经元,而图中称为二层神经链路,因为真正传递信号的阶段只有两层(从0层到第1层,再从第1层到第2层)
**关于线性函数的问题:**线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。为了具体地(稍微直观地)理解这一点,我们来思考下面这个简单的例子。这里我们考虑把线性函数 h(x) = cx 作为激活
函数,把y(x) = h(h(h(x)))的运算对应3层神经网络A。这个运算会进行y(x) = c × c × c × x的乘法运算,但是同样的处理可以由y(x) = ax(注意,a = c 的3次方)这一次乘法运算(即没有隐藏层的神经网络)来表示。如本例所示,
使用线性函数时,无法发挥多层网络带来的优势。因此,为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。
线性函数:h(x) = cx。c为常数形如此种式子,其余的称为非线性函数
1.阶跃函数(step): 指的是有点像阈值函数的一种函数,当输入满足某种值的限制后,会进行值的输出
2.激活函数: 主要是用于使每一层的神经函数更加贴近真实.(如图所示表示常见的一层神经函数过程,Activation表示激活函数。)主要目的是負責将神经元的输入映射到输出端,常见的激活函数: sigmoid函数、Relu、阶跃函数等
因为神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,所以如果没有激活函数,那么无论你构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,我们会发现常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。
3.sigmoid函数: 也称为S型函数(逻辑回归函数),在后续的RL中常用,也作为一种激活函数使用
#4.3 sigmoid函数的实现
def sigmoid(x):
return 1 / (1 + np.exp(-x)) #exp表示的是e的-x次方
x = np.array([-1.0, 1.0, 2.0])
print(sigmoid(x))#能够实现sigmoid是因为Numpy所具有的广播功能
x = np.arange(-6,5, 0.1)
y1 = sigmoid(x)
ReLU函数:
即返回自变量与x的值的最大值
def Relu(x):
return np.maximum(0, x)#返回最大值
x = 20
print(Relu(x))