神经网络入门回顾(感知器、多层感知器)

摘要:
神经网络属于“连接主义”,与统计机器学习的理论基础大相径庭。在我自己的理解中,统计机器学习的理论是基于统计学的。这一理论足够强大,足以给人一种安全感;神经网络理论更侧重于代数,具有较强的表示能力,但可解释性较差。这两个不同的机器学习流派偶尔会有相互等效的算法。本文综述了神经网络最简单的组成部分:感知器、多层感知器。可以参考一些简单的代码实践:Python实现感知器的逻辑电路(AND门、NAND门

神经网络属于“联结主义”,和统计机器学习的理论基础区别还是很不一样。

以我自己的理解,统计机器学习的理论基于统计学,理论厚度足够强,让人有足够的安全感;而神经网络的理论更侧重于代数,表征能力特别强,不过可解释性欠佳。

这两个属于机器学习的两个不同的流派,偶尔也有相互等价的算法。

本文回顾神经网络最简单的构件:感知器、多层感知器。一些简单的代码实践可以参考:Python 实现感知器的逻辑电路(与门、与非门、或门、异或门)

感知器

感知器是二类分类的线性分类模型,将实例划分为正负两类的分离超平面(separating hyperplane),属于判别模型。

感知器基于线性阈值单元(Linear Threshold Unit, LTU)构件的。以下是 LTU:

神经网络入门回顾(感知器、多层感知器)第1张

LTU 相当于对输入做一个线性组合,再加一个阶跃函数

常用的阶跃函数是 Heaviside 和 Sign。

神经网络入门回顾(感知器、多层感知器)第2张

哪怕只有一个 LTU 也可以作为简单的线性二分类器,类似于逻辑回归或者线性 SVM

感知器就是由一层 LTU 组成。以下是一个多输出分类器。 

神经网络入门回顾(感知器、多层感知器)第3张

为了求得感知器的权重参数,需要确定一个学习策略,即定义损失函数并将损失函数极小化。有这样几种选择:

1. 误分类点的总数:损失函数不是 w, b 的连续可导函数,不易优化。
2. 误分类点到超平面的总距离:感知器所采用的损失函数。

感知器的损失函数是:

$$-frac{1}{left | w ight |}sum_{x_iin M}y_i(wx_i+b)$$

感知器学习问题转化为上式损失函数的最优化问题,最优化的方法是随机梯度下降法(stochastic gradient decent)。

感知器收敛性:当训练数据集线性可分时,感知器学习算法原始形式是收敛的。

感知器的具体算法分为两种形式:

1. 原始形式
2. 对偶形式:暂不介绍

原始形式算法:

$$wleftarrow w+eta y_ix_i$$
$$bleftarrow b+eta y_i$$

使用 sklearn 使用感知器算法:

 1 import numpy as np
 2 from sklearn.datasets import load_iris
 3 from sklearn.linear_model import Perceptron
 4 
 5 iris = load_iris()
 6 X = iris.data[:, (2, 3)] # petal length, petal width
 7 y = (iris.target == 0).astype(np.int) # Iris Setosa?
 8 per_clf = Perceptron(random_state=42)
 9 per_clf.fit(X, y)
10 
11 y_pred = per_clf.predict([[2, 0.5]])
12 
13 print(y_pred)

输入如下:

[1]

与逻辑回归相比,感知器不能输出概率

多层感知器

MLP 的组成:

  • 1 个输入层
  • 1 个以上的隐藏层
  • 1 个输出层

当隐藏层多于 2 层时,又叫深度神经网络(Deep Neural Network, DNN)。

神经网络入门回顾(感知器、多层感知器)第4张

训练 MLP 的算法是后馈训练算法(backpropagation training algorithm)。后馈训练算法也就是使用反向自动求导(reverse-mode autodiff)的梯度下降法

1. 前馈:在每个连接层计算每个神经元的输出。
2. 计算网络的输出误差,并且计算最后一层的每个神经元对于误差的贡献程度。
3. 继续计算上一层的每个神经元对于误差的贡献程度。
4. 直到算法到达输入层。

为了很好地实施后馈训练算法,D. E. Rumelhart 对于神经网络架构做了重大的改变:把阶跃函数改为了几率函数(logistic function)$f(z)=frac{1}{1+e^{-z}}$。因为阶跃函数导数都为 0,无法实施梯度下降;而几率函数处处可导。

除了用几率函数作为激活函数之外,还有:

- 双曲正切函数:tanh (z) = 2σ(2z) – 1。S 形状、连续、可导,不过输出值在 -1 到 1 之间,使得训练开始时神经层输出更加正则化,常常加速收敛。
- ReLU 函数:ReLU (z) = max (0, z)。连续,但是在 z=0 处不可导,可能使梯度下降震荡。但在实际中,ReLU 效果不错,速度也快。此外,由于它没有最大值,可以缓解一些梯度下降的问题。

 神经网络入门回顾(感知器、多层感知器)第5张

 MLP 常常用于分类问题,每个输出对应一个不同的二值类别。如果类别太多了(比如数字图片 0~9),输出层常常用另一个共用的激活函数来代替:Softmax 函数

 神经网络入门回顾(感知器、多层感知器)第6张

 参考

  • 《Neural networks and deep learning》by Aurélien Géron

免责声明:文章转载自《神经网络入门回顾(感知器、多层感知器)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vscode wsl2使用junit测试javaC++-如何使用JSONCPP库来读写JSON文件(搭建环境)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

搭建Squid3 密码账号IP代理

默认端口是端口3128,它已被滥用。注意修改端口,并应用Squid密码帐户方法保护流量...

【01】如何在XMind中排列自由主题

如何在XMind中安排免费主题。在XMind思维导图软件中,用户可以根据需要添加免费主题。然而,由于自由主题的灵活性,它并不整洁,与需要控制界面有序排列的用户相比,这会造成一定的麻烦。首先选择要组织的所有免费主题,单击,然后在下拉框中选择以安排免费主题。有六种排列方式:左对齐、垂直居中、右对齐、顶部对齐、水平居中和底部对齐。...

WritableWorkbook 详细用例 (转)

1WritableWorkbookworkbook=工作簿.createWorkbook(newFile(“d:\test.xls”));1Workbookwb=工作簿.getWorkbook(newFile(“src\test\test.xls”));...

windows下mstsc 远程Ubuntu 教程

为远程桌面控制设置Ubuntu 16.04的缺点是重新启动系统需要使用监视器登录系统。首先,我们将Ubuntu远程控制设置为允许远程连接,进入系统-˃首选项-˃桌面共享,或直接搜索桌面共享。如图所示,选中此项,然后选中安全项,并设置远程密码。...

webstorm关闭烦人的eslint语法检查

使用eslint语法检查后,我们发现JS代码中到处都是红线。通过右键菜单中的fixeslint problems选项,我们可以发现页面代码格式完全被eslint包装。只需关闭exlint语法检查。看不见,想不起来。反向关闭不会影响代码开发,但相反,它会影响代码开发。关闭eslint位置:文件--˃设置--˃语言和框架--˃CodeQualityTools--...

uniapp安卓真机调试提示检测不到手机【解决办法】

以下是具体的解决方案:步骤1:打开、查找、单击并单击7次或更多次,以允许开发人员进行选择。...