神经网络
一些概念
输入层:最左边的一列,用来输入数据的一层
输出层:最右边的一列,用来输出数据
隐藏层:中间层。
神经网络和感知机是相似的,二者最大的区别就在于激活函数。
激活函数
先看一下之前感知机的函数式
简单做下变形
引入一个函数 h(x),将函数式继续简化
其中
这种会将输入信号的总和转换为输出信号,将这个函数h(x)成为激活函数
sigmoid函数
python实现
1 | import numpy as np |
阶跃函数
和之前感知机部分一样,给定一个阈值,当超过阈值就切换输出。这种函数成为阶跃函数
1 | import numpy as np |
ReLU函数
ReLU函数:在输入大于0时,直接输出该值;在小于等于0时为0
python实现
1 | def relu(x): |
图形显示
1 | import numpy as np |
sigmoid和阶跃函数比较
不同点:
“平滑性”不同,sigmoid函数是一条平滑的曲线,阶跃函数以0为界,输出发生急剧变化。另一个不同则是,感知机当中神经元之间流动的是0,1的二元信号,而神经网络中流动的是实数信号。
共同点:
二者有相似形状,输入越小,越接近0,输入增大接近1。输出都是在0和1之间。
非线性函数
激活函数都是非线性函数,为啥是非线性函数呢?
举个栗子就能证明出来了,如果激活函数使用了线性函数,h(x) = cx,那么经过三层神经网络, 就变成了 h(h(h(x))) = c c c x,完全相当于 h(x) = c^3 x , 令a = c^3,那和h(x) = a * x 就没区别了,叠加层数变得毫无意义。为了发挥叠加层的优势,需要用非线性函数。