引介:未来已来
人工神经网络(ANN)是深度学习领域的核心概念,而深度学习几乎已经是现代人工智能(AI)的代名词,其对 AI 的发展起到了重要的推动作用。我们将围绕 ANN 的基本概念与原理、发展历史和近来趋势、应用领域等进行由浅入深的探讨,慢慢全面而细致地沉浸到这个重要主题的探索与剖析中去。
机器学习与深度学 习
机器学习
“路边的水果摊上,青绿的西瓜根蒂蜷缩,敲起来声音浑浊,显然是皮薄肉厚瓤舔的好瓜。”
这里因为我们吃过、看过足够多的西瓜(E),对于这个瓜好不好(T),基于色泽青绿、根蒂蜷缩、敲声浊响这几个特征,我们可以很准确的(P)判断这是一个正熟的好瓜。
将以上人类与生俱来的“学习”能力通过计算手段赋予计算机,就成了机器学习。
什么是机器学习?
卡内基梅隆大学机器学习系创始人、美国国家工程院院士 Tom M. Mitchell 给出了工程化的概念:
一个计算机程序利用经验(E)来学习任务(T),性能是(P),如果针对任务(T)的性能(P)随着经验(E)不断增长,则称为机器学习。
神经网络(深度学习)
深度学习是机器学习方法的一种,但在当下爆火的人工智能领域,机器学习方法基本可以分为深度学习与其他(传统统计学习)。
神经网络模型模拟了生物神经系统对真实世界物体作出的交互反应,是对大脑工作机制的简单理想化。
人类大脑的神经系统由千亿级的神经元组成,每个神经元与其他神经元相连。当神经元“兴奋”时,就会向相连的神经元发送化学物质(神 经递质),从而改变神经元内的电位。如果某神经元的电位超过了一个“阈值”,它就会被激活而“兴奋”起来,并向其他神经元发送神经递质。
将生物神经元抽象成简单的模型,就是一直沿用至今的 M-P 神经元
(由 McCulloch 和 Pitts 提出,因此以两人名字首字母命名)。
神经元:基本单位,接受输入信号并进行处理。
M-P 神经元接收来自 n 个其他神经元的输入信号
x,将输入信号按不同权重
w 相加,再加上一个偏置
b(类似生物神经元的电位阈值),得到一个总输入值
a,最后将 a 通过激活函数
h() 处理后输出
y。
激活函数:用于决定是否激活神经元的函数,常用的有 sigmoid、tanh 和 ReLU 函数。
其中权重 w 与偏置 b 统称为神经网络的权重参数
。
用数学式表示 M-P 神经元的计算:
有了神经元的概念,我们将多个相同结构的神经元通过并行互联组成具有适应性的网络,也就成了神经网络
。
人工神经网络是模仿人类神经系统的信息处理模型,由大量的“神经元”通过连接形成的网络结构。这些神经元通常分为输入层、隐藏层和输出层。上图所示就是一个两层(隐藏和输出层的总层数)神经网络。
层次结构:包含至少 一个输入层、一个或多个隐藏层和一个输出层。
输入层神经元仅接收外界输入,不包含功能神经元;中间层(隐层)与输出层的功能神经元对信号进行加工,输出层神经元输出最终结果。
常见的神经网络是如图 2 所示的层级结构,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,网络拓扑结构上不存在环或回路,这种网络被称为多层前馈神经网络
(multi-layer feedforward neural networks
)。
图 2 所示神经网络通常被称为“两层网络
”,或“单隐层网络
”。输入层
神经元接收外界信号输入,隐层
(隐藏层
,也称中间层
)与输出层
神经元对信号进行加工,最终结果由输出层神经元输出。只有隐层与输出层包含功能神经元
,输入层仅接受输入,不做函数处理。
深度学习模型
深度学习模型
是指加深层的神经网络,虽然没有透彻的理论研究证明加深层是有益的,但从实验结果看,加深层是一种尝试优化效果的重要手段。
即使抛开最终模型效果不论,加深层还有助于减小模型参数量,减小学习数据规模等收益;同时也是分层次的分解需要学习的问题,分层次的传递信息的一种手段。即加深层可以使学习更高效。
学习与推理
假设有一个任务需要用图示 1 的神经网络来实现,该任务的输入是 ,输出是 。我们首先需要从训练数据学习处理该任务的计算逻辑,然后才可以使用学得的模型进行任务处理,也即推理。
神经网络的学习
,就是通过某种学习算法,在该两层神经网络上,根据已知的输入输出数据对,即训练数据,持续调整神经网络的权重参数,直至找到最适合处理该任务的权重参数。
神经网络的推理
,就是在明确该网络所有权重参数的情况下,给该网络一个新的输入 ,网络上的功能神经元会按如式 1 计算出各自节点的值,最终得到一个输出 。
过程概要
ANN 的工作原理包括两个主要过程:前向传播
和反向传播
。
前向传播:在输入层接收数据,经过隐藏层的权重和激活函数的处理,最终输出结果。
其中,是第 l 层的输出,是权重矩阵,是偏置,f 是激活函数
。
反向传播:通过梯度下降法
优化模型,计算每个参数的梯度,并更新权重。重要的公式为:
其中, 是学习率
,L 是损失函数
。
此处仅提供一个概要的印象,神经网络模型的学习与推理过程我们将在后续篇章中详细探讨。
前向传播演示
利用 Python 及相关库(如 NumPy 和 Matplotlib),我们可以简单实现一个基础的 ANN 模型的计算过程。下面通过手动编写一个简单的多层感知器
(MLP
)用于演示如何对输入对象进行推理(前向传播过程)的。
import numpy as np
# 激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 前向传播
def forward(X, W1, b1, W2, b2):
hidden_layer = sigmoid(np.dot(X, W1) + b1)
output_layer = sigmoid(np.dot(hidden_layer, W2) + b2)
return output_layer
# 初始化权重和偏置
np.random.seed(42)
W1 = np.random.rand(2, 2)
b1 = np.random.rand(2)
W2 = np.random.rand(2, 1)
b2 = np.random.rand(1)
# 输入数据
X_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
# 运行前向传播
output = forward(X_data, W1, b1, W2, b2)
print(output)
# [[0.7501134 ]
# [0.7740691 ]
# [0.78391515]
# [0.79889097]]
前置技能
掌握了如下技能,后文的深度学习相关理论与实践都将轻而易举:
- Python 基础:基本语法、Numpy 库、Matplotlib 库。
- 数学基础:矩阵运算、数值微分。