浅谈Neural Networks
- 神经网络介绍
- 神经网络原理
- 感知机
- 激活函数
- Sigmoid 函数
- 双曲正切函数(tanh)
- 后序
神经网络介绍
人工神经网络(Artificial Neural Networks)也简称为神经网络(NN)。是模拟人类大脑神经网络的结构和行为。
20 世纪 80 年代以来,人工神经网络(Artificial Neural Network)研究所取得的突破性进展。神经网络辨识是采用神经网络进行逼近或建模,神经网络辨识为解决复杂的非线性、 不确定、未知系统的控制问题开辟了新途径。
神经网络主要应用领域有:模式识别与图象处理(语音、指纹、故障检测和图象压缩等)、 控制与优化、系统辨识、预测与管理(市场预测、风险分析)、通信等。
神经网络原理
经典的神经网络有以下三个层次组成:输入层(input layer), 隐藏层 (hidden layers), 输出层 (output layers)。
每个圆圈就是一个神经元。每层与每层之间是没有连接的,但是层与层之间都有连接。 每个连接都是带有权重值的。隐藏层和输出层的神经元由输入的数据计算输出,但输入层神 经元只有输入,一般指一个训练数据样本的数据。
神经系统的基本构造是神经元(神经细胞),它是处理人体内各部分之间相互信息传递的 基本单元。每个神经元都由一个细胞体,一个连接其他神经元的轴突和一些向外伸出的其它较短分支—树突组成。
轴突功能是将本神经元的输出信号(兴奋)传递给别的神经元,其末端的许多神经末梢使得兴奋可以同时传送给多个神经元。树突的功能是接受来自其它神经元的兴奋。神经元细胞体将接收到的所有信号进行简单地处理后,由轴突输出。神经元的轴突与另外神经元神经末梢相连的部分称为突触。
感知机
感知机是一类人造神经元,模拟这样的大脑神经网络处理数据的过程。
感知机模型如下图:
其中 x1,x2 为输入,b 为偏置,激活函数被称为符号函数(sign function)
感知机是一种基本的分类模型,类似于逻辑回归。不同的是感知机的逻辑函数用的是 sign,而逻辑回归用的是 Sigmoid 函数,感知机也具有连接权重和偏置。
感知机可以用来处理线性可分类问题,线性可不可分简单来说,就是可不可以用一条直线把图上两类点划分开。如第二张图所示,无论怎么画直线都无法将两类点分区开。
对于线性不可分问题一般用多层神经网络,
打开 http://playground.tensorflow.org/。
使用 playground 体会感知机的分类。
激活函数
Sigmoid 函数
sigmoid 函数 由于其单增及反函数单增等性,sigmoid 函数常被用做神经网络的激活函数,将变量映射到 0,1 之间。所以主要用来做二分类神经网络。 由于其平滑、易于求导的特性,处理特征相差不是很大或者复杂的数据效果比较好。
- sigmoid 函数的公式
- 使用 matplotlib 绘制 Sigmoid 函数
import numpy as np
import matplotlib.pyplot as plt
# 定义sigmoid函数:将变量定位0-1之间
def sigmoid(x):
return 1.0 / (1+np.exp(-x))
# 生成一串数-10 -- 10
x = np.arange(-10, 10)
# 指定画布大小
fig, ax = plt.subplots(figsize=(12, 4))
# 绘制, 指定绘制颜色, x, y, 参数
ax.plot(x, sigmoid(x), 'r')
# 显示绘图
plt.show()
执行结果如图所示:
双曲正切函数(tanh)
双曲正切函数(tanh) 是双曲正弦函数(sinh)与双曲余弦函数(cosh)的比值,语法格式如下:
双曲正切函数(tanh)与 tf.sigmoid 非常接近,且与后者具有类似的优缺点。
tf.sigmoid 和 tf.tanh 的主要区别在于后者的值域为[-1.0,1.0]。
- 使用 matplotlib 绘制 tanh 函数
import numpy as np
import matplotlib.pyplot as plt
# 准备x坐标, 等间距-10 10 之间100个点
x = np.linspace(-10, 10, 100)
# y直接调用numpy函数封装好的
y = np.tanh(x)
# 绘图
plt.plot(x, y)
# 显示
plt.show()