1、什么是神经网络?

        神经网络是由具有适应性的简单单元(神经元模型)组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。【Kohonen 1988】

        神经网络的一 个重要性质是它可以自动地从数据中学习到合适的权重参数。

        用图来表示神经网络的话,如图所示。我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层。中间层有时也称为隐藏层。“隐藏”一词的意思是,隐藏层的神经元(和输入层、输出层不同)肉眼看不见。


神经网络怎么输出中间层特征图 神经网络中间层是什么_深度学习

《深度学习入门》神经网络的例子

2、激活函数

        感知机与神经网络的主要区别就是激活函数,其他方面,比如神经元的多层连接的构造、信号的传递方法等,基本上和感知机是一样的。               

         激活函数会将输入信号的总和转换为输出信号。例


神经网络怎么输出中间层特征图 神经网络中间层是什么_神经网络怎么输出中间层特征图_02

激活函数示例

          激活函数的作用在于决定如何来激活输入信号的总和。激活函数是连接感知机和神经网络的 桥梁。


神经网络怎么输出中间层特征图 神经网络中间层是什么_神经网络_03

《深度学习入门》激活函数计算过程

    

        感知机中激活函数用的是阶跃函数。

        神经网络中激活函数用的是sigmoid函数:exp(−x)表示e −x 的意思。

神经网络怎么输出中间层特征图 神经网络中间层是什么_激活函数_04

          神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送给下一个神经元。

        阶跃函数 VS sigmoid函数

        首先用Python实现阶跃函数图像:

import numpy as np
import matplotlib.pylab as plt
def step_function(x):
 return np.array(x > 0, dtype=np.int)
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()

        np.arange(-5.0, 5.0, 0.1)在−5.0到5.0的范围内,以0.1为单位,生成 NumPy数组([-5.0, -4.9, ..., 4.9])。step_function()以该NumPy数组为参数,对数组的各个元素执行阶跃函数运算,并以数组形式返回运算结果。 


神经网络怎么输出中间层特征图 神经网络中间层是什么_深度学习_05

阶跃函数图像

    

Python实现sigmoid函数:

import numpy as np
import matplotlib.pylab as plt
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) # 指定y轴的范围
plt.show()


神经网络怎么输出中间层特征图 神经网络中间层是什么_神经网络_06

sigmoid函数

         首先注意到的是“平滑性”的不同。sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。sigmoid函数的平滑性对神经网络的学习具有重要意义。

        另一个不同是:感知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续 的实数值信号。

        相同性质:当输入信号为重要信息时, 阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时, 两者都输出较小的值。且不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。两者均为非线性函数。

        线性函数VS非线性函数

        神经网络必须使用非线性函数。如果线性函数(h(x)=cx)作为激活函数,加深神经网络的层数没有意义。例:三层神经网络y(x)=h(h(h(x)))可以写成y(x)=c*c*cx,即y(x)=ax(a=c*c*c)没有隐藏层神经网络。因此,为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。

        ReLU函数

        ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0。


神经网络怎么输出中间层特征图 神经网络中间层是什么_深度学习_07

ReLU函数

        

        图像实现: 

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.ylim(-1, 5) # 指定y轴的范围
plt.show()


神经网络怎么输出中间层特征图 神经网络中间层是什么_python_08

ReLU函数

          在神经网络发展的历史上,sigmoid函数很早就开始被使用了,而最近则主要使用ReLU(Rectified Linear Unit)函数。