一、感知机
在机器学习中,
感知机
(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法
对损失函数进行最优化(最优化)。感知机的学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知机模型对新的实例进行预测的,因此属于判别模型。感知机由
Rosenblatt
于1957年提出的,是
神经网络
和
支持向量机
的基础。
假设输入空间(特征向量)为
X
⊆
R
n
,输出空间为
Y
=
{
−
1
,
+
1
}
x
∈
X
表示实例的特征向量,对应于输入空间的点;输出
y
∈
Y
表示示例的类别。由输入空间到输出空间的函数为
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
称为
感知机
。其中,参数
w
叫做权值向量
weight
,b称为偏置
bias
。
w
⋅
x
和
x
的
点积
∑
i
=
1
m
w
i
x
i
=
w
1
x
1
+
w
2
x
2
+
.
.
.
+
w
n
x
n
二、从多层感知器到卷积网络(一)
写在最前面
本系列文章试图以直观的思维讲解神经网络的两个种类——多层感知器(Muti-Layer Percetron)和卷积网络(Convolutional Neural Network)。这两种网络都属于前馈型网络(Feedforward network),其中多层感知器(MLP)是最简单也是最常见的一种神经网络结构,它是所有其他神经网络结构的基础,所以不出意外,在介绍卷积网络前,不得不提一提它。卷积网络则是另外一种特殊结构的前馈网络,在图像识别方面有着惊人的效果,了解它也是百益无害。作为普通的程序员,直接看成熟的开源代码学习神经网络是一个很大挑战。Andrew Ng的
Ufldl
教程是一个不错的入门材料,但是课后作业用Matlab实现神经网络始终对于我们奋战在一线的程序员觉得浑身不自在,没有彻头彻尾掌握的快感。斯坦福的
cs231n课程
是目前我看到的最容易懂的神经网络教程,本文实现卷积网络大部分知识都是从该课程的notes上得的,然而里面(暂时?)并没有详细介绍backprop(这是训练神经网络的一种有效的方法,后面我会提到)在卷积网络中的实现细节(这也是我卡得比较久的地方)。但是在我翻遍材料,读遍教程,看遍coursera所有神经网络相关的课程之后,最终我还是能够不借助任何现有的机器学习API(除了Numpy的矩阵向量的基本操作),实现MLP和CNN,欣喜之余,决定总结一番,这也是本系列的来由。由于MLP是CNN的基础,文章第一篇先介绍MLP,第二篇进阶到CNN。文章尽量以浅显语言表达,对于一些生物知识也是如此,错误在所难免,希望读者指正,不胜感激。好了,有台阶可以下了,现在开始进入正题。
神经网络的由来
人是万物之灵,而大脑便是灵中灵,自从人类发现自己是通过大脑思考后,研究大脑的人便不计其数,而计算机研究者也不甘示弱,于是神经网络的计算模型便应运而生了。现在我们先回顾一下高中的生物知识,我们知道,生物神经系统的基本结构和功能单位是神经元(神经细胞),而神经元的活动和信息在神经系统中的传输则表现为一定的生物电变化及其传播。大量生物学家对大脑进行研究,并提出了神经系统工作原理的许多假设。计算机科学家估计在某天晚上读了相关的理论,然后给出了自己的理解:大体就是神经元通过树突接收到外部信号,然后对信号作出反应,要么通过轴突激发一个冲动,向回路中相邻的神经元发出信号,要么相反,不发出信号。于是计算机科学家利用这点理解,研发出了一种类似这种工作方式的模型——人工神经网络,读者可以相信,生物学家专注研究大脑那么多年的东西,岂是程序员可以简单模拟的,所以有些计算机学者为了造成不必要的误解,就刻意避开神经网络神经元这样的说法,取而代之就是简单的以“网络”(Network)“处理单位”(Unit)称呼,其实背后还隐藏着雄心壮志——人工神经网络目标并不只是简单地模仿大脑,是要变成一种超越大脑的智能。总之,我们大概是知道神经网络的由来了。
深入了解神经网络
首先欢迎我们生物学家的神经网络登场:
没错,这就是生物学家心目中的神经网络结构的一小部分,信号首先通过树突接收,然后经过细胞体中处理,再通过轴突传输信号给另外的神经元。 读者此时可能对计算机科学家发明的神经网络产生兴趣了,现在我们就来揭开它的庐山真面目。
看到吧,就是这货(图是从Michael Nielsen 的书中借用的,详见
http://neuralnetworksanddeeplearning.com/
,该书确实很不错,图文并茂,并且有很多JS例子),图中圆圈就是大名鼎鼎的神经元,而那些带有箭头的实线可以理解为轴突和树突。这就是我们将要介绍的MLP,
从左到右分别是:输入层,隐藏层,输出层。
就是这样,计算机科学家认为,这样的结构可以作出图像识别,语音识别等等传统计算算法很难做出的东西。至于如何做到,读者可以先喝杯水,理清思路,听我道来。
我们不得不佩服,计算机学家实践模仿能力确实超强。首先,生物学家认为
神经元会对信号进行处理,然后要么向下一个神经元传递冲动,要么抑制传递
,计算机学家当然数字化一点,既然神经元会对信号处理,然后做出传递或抑制的动作,那么可以传递的时候就
圆圈就输出1,抑制的时候就输出-1
,太棒了,这样应该就可以模仿神经元的一部分动作了。但是这个传递过程要怎么弄呢?我们知道信号还要经过轴突的,直接将-1或1的信号作为下一个神经元的输入,就不能很好的体现这一点了。
通过轴突这个通道,信号总该有所变化吧
,于是
模拟经过轴突的过程就是给传输信号的通道加上一些权重,就是说对于-1/1信号x,进入下一个神经元前,必须乘上权重w,因此下一个神经元收到的输入信号就是
w
∗
x
,而不是简单的x了。
这样,很好地模拟了神经元与神经元沟通的过程,so far so good。
有了上述的总体设计之后,现在计算机科学家要进入详细设计阶段了。对于计算机而言,输入信号便是01所表达的任意数字,那么神经元接收到信号之后,如何将其输出为-1/1信号呢,一个方式就是将神经元作为一个
阶跃函数
,当信号
w
∗
x
经过神经元时,简单对其做如下处理:
if w*x > 0:
output = 1
else:
output = -1
这种
以阶跃函数模拟神经元的方式
在早期被称为”
感知器
”(Percetron),然后多个感知器相连便是一个网络结构,然而计算机学家深入研究后,发现这种
生硬地让神经元输出-1或1的方式对于以后的优化工作极其困难
。那么是不是没办法了呢?我们知道凡事不要太绝对,既然直接输出-1或1对于以后的工作太困难,那么算了,我们不要那么生硬了,
放宽一下限制,输出是一个-1到1的平滑范围好了
,计算机学家冥思苦想,其中数学功底不错的人就联想到数学中双曲函数中的
正切函数
t
a
n
h
不就满足这样的要求吗?!于是就有了大名鼎鼎的
t
a
n
h
君就登场了。
t
a
n
h
君对于我们理解神经网络有重大意义,现在我们稍微介绍一下他:
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
模拟神经元而不是阶跃函数模拟,就不是Percetron了,那么为什么还是叫MLP呢?呵呵,回答是历史遗留问题,就像历史遗留代码,我们为了节约成本,只能忍受了。
问题的提出环节
目前为止,我们已经知道计算机科学家精心发明的神经网络是如何模拟生物的神经网络系统了。然而The more we know, the more we know don’t know,仅仅知道模拟的对应过程是远远不能满足我们如黑洞般的好奇心,这里我仅代表广大群众提出几大疑惑:
-
具体如何获得输出呢?
-
怎么掌控我们的神经网络是一个识别猪的程序而不是一个识别狗的程序呢?
-
模拟神经元之间传递信号的权重W是如何炼成的?
-
……..(此处省去问题1万个,欢迎读者踊跃提出)
问题解答环节
网络的输出
回答第一个问题之前,请读者假设我们已经解决第三个问题了,也就是我们已经获得了神经元间的权重了(不要慌张,我们一定会得到权重的!)。 好,我们正式一点介绍网络的具体形象:
咋眼一看,信息量好大,别慌,看我慢慢将其拆解:
-
最左边就是我们的输入层了,算是网络的第0层,通常是一个向量
x
:
=
{
x
1
,
x
2
,
x
3
.
.
.
x
n
}
(x是一个行向量,本文对于输入都是以行向量处理)就可以搞定
-
对于权重
的记法,我们是这样处理的:对于第0层的第1个神经元与第1层第1个神经元的权重,我们记为
w
1
1
,
1
,第0层第1个神经元与第1层第2个神经元的的权重,我们记为
w
1
1
,
2
,这样依此类推。
-
至于一个个圈圈,不是我们的神经元大哥还能是谁呢?由tanh君掌控着,靠得住
-
那几个格格不入的圈圈,里面只有一个+1,是我们的bias神经元(别着急,后面会提到)
现在可以来说说神经网络如何计算输出了,我们先聚焦下图:
上图说明了网络中两个特定神经元的计算过程。如果你重新回顾一下线性代数的基础知识,你会发现有如下结论:
对于一个输入向量x(这里x是一个行向量),第0层与第1层的权重矩阵为
多输入多输出(MIMO)回归预测是一种常见的
机器学习
问题,它涉及使用多个输入变量来预测多个输出变量的值。在实际应用中,您可以根据您的需求和数据设置来准备自己的训练数据。通过这个简单的例子,您可以了解如何使用MATLAB实现MLP
多层感知机
模型来进行多输入多输出回归预测。您可以根据自己的需求和数据进行调整和扩展,以解决更复杂的问题。这里我们使用训练数据本身进行预测,但在实际应用中,您可以使用新的输入数据进行预测。通过运行完整的代码,您将获得MLP模型在多输入多输出回归预测任务上的预测结果。
本文将介绍如何使用MATLAB实现一个多输入单输出的MLP模型,并提供相应的源代码。通过以上步骤,我们可以使用MATLAB实现一个多输入单输出的MLP模型,并进行回归预测。需要注意的是,MLP模型的性能受到数据质量、网络结构和训练参数的影响,可能需要根据具体问题进行调整和优化。可以将输入特征保存在一个m×n的矩阵X中,输出标签保存在一个1×n的向量y中。在准备好数据和网络结构后,我们可以使用准备好的数据对MLP模型进行训练。在完成网络的训练后,我们可以使用训练好的模型对新的输入数据进行预测。
1、MLP-Hash: Protecting Face Templates via Hashing of Randomized Multi-
Layer
Per
ceptron
https://arxiv.org/pdf/2204.11054.pdf
Hatef Otroshi Shahreza, Vedrana Krivokuća Hahn, Sébastien Marcel
用于身份验证的人脸识别系统的应用正在迅速增长。尽管最先进的(SOTA)人脸识别系统具有很高的识别性能,但为他们会为每个用户提取特征并存
通过以上步骤,我们可以使用MATLAB实现MLP
多层感知机
模型的设计。然后,我们定义MLP模型的结构和训练参数,并使用训练集对模型进行训练。最后,我们使用验证集和测试集评估模型的性能。
多层感知机
(Multi
layer
Per
ceptron
,简称MLP)是一种常用的人工神经网络模型,广泛应用于
机器学习
领域。首先,我们需要准备一些训练数据。在MLP模型中,我们将使用前向传播和反向传播算法来训练网络并优化权重。请注意,这只是一个简单的示例,实际应用中可以根据具体问题进行模型结构的调整和参数的优化。
摘要(What)
NCF是一种通用的框架,它可以表达和推广矩阵分解。
为了提升NFC的非线性建模能力,我们提出了使用
多层感知机
去学习用户-项目之间交互函数(interaction function)。
引言(Why)
矩阵分解(MF):
将用户和项目映射到共享潜在空间(shared latent space),使用潜在特征向量(latent features),用以表示用户或项目。这样一来,用户在项目上的交互就被建模为
文章目录
多层感知机
从线性到非线性激活函数ReLU函数sigmoid函数tanh函数模型选择、欠拟合和过拟合训练误差和泛化误差统计学习理论模型复杂性模型选择验证集KKK折交叉验证权重衰减范数与权重衰减Dropout正向传播、反向传播和计算图数值稳定性和模型初始化梯度消失和梯度爆炸参数初始化默认初始化Xavier初始化环境和分布偏移分布偏移的类型协变量偏移标签偏移概念偏移分布偏移示例医学诊断自动驾驶汽车非平稳分布更多轶事分布偏移纠正经验风险与真实风险协变量偏移纠正标签偏移纠正概念偏移纠正总结
多层感知机
在上一篇文章中,我们了解到感知机的局限:不能表示异或门。如果我们想要使用感知机表示异或门怎么办呢?下面我们就可以学习到这方面的知识了。
1 已有逻辑门电路的组合
异或门可以通过其他门电路进行表示,我们可以通过组合与门、与非门、或门实现异或门的逻辑功能(在大学的《数字电子技术基础》这门课中,这个是非常基础的知识哦)。在已知与门、与非门、或门的逻辑功能(真值表)的情况下,如何使用这些逻辑门组合出异或...
多层感知机
(MLP,Multi
layer
Per
ceptron
)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构。多层感知器(multi
layer
Per
ceptron
,MLP)是指可以是感知器的人工神经元组成的多个层次。MPL的层次结构是一个有向无环图。通常,每一层都全连接到下一层,某一层上的每个人工神经元的输出成为下一层若干人工神经元的输入。
可以看出此时神经网络已将四个点分为了三类,蓝线下方一类点,蓝线、红线中间一类点,红线上方一类点,之后将同一类点归为一个点后,就将线性不可分的XOR问题转化为一个线性可分的问题了,该问题我们使用单层感知器即可完成解答。T是输出的目标函数值,并且T矩阵设置中的0和1代表着绘制图中对应输入样本点的图案,即T=[0 1 1 0]时,在图中1,4两点为“o”图案,2,3两点为“+”图案。进行训练,需注意第二层网络进行训练的输入矩阵就是第一层网络的输出矩阵,训练完成画出图案。