掘金 人工智能 04月28日 21:42
机器学习入门(九)多层感知机
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了神经网络中最基础的类型——多层感知机(MLP)。传统机器学习算法在处理具有大量特征的复杂数据时,面临特征组合爆炸的问题。神经网络通过构建包含输入层、隐藏层和输出层的结构,有效解决了这一问题。文章详细阐述了神经网络的基本要素,包括权重、偏置和激活函数,并解释了MLP如何实现逻辑运算,如AND、OR和NOT。最后,文章还展示了如何使用Keras这一Python接口来实现数字识别,体现了神经网络在实际应用中的强大能力。

🧠 神经网络通过学习得出自身特征,克服了传统逻辑回归中原始特征的限制。在多层感知机中,输出层利用的是隐藏层学习到的新特征,而非直接使用输入层的原始特征,这使得模型能更好地进行预测。

⚖️ 神经网络的三要素包括权重、偏置和激活函数。权重表示神经元之间的连接强度,偏置用于保证输出值能正确激活,而激活函数则用于实现非线性映射,将神经元的输出幅度限制在一定范围内,常用的激活函数是Sigmoid函数。

🔢 多层感知机可以实现基本的逻辑运算。通过调整神经元的权重,可以使其等同于逻辑与(AND)、逻辑或(OR)以及逻辑非(NOT)等运算。组合这些基本逻辑单元,甚至可以实现更复杂的功能,如XNOR功能。

🐍 Keras是一个用Python编写的神经网络API,易于安装和使用,集成了深度学习中各类成熟算法。它能够以TensorFlow或Theano作为后端运行,并提供了丰富的示例、教程和详细的文档,方便开发者快速上手。

在之前的文章中,我们学习了各种机器学习的算法。从这篇文章开始,我们将了解现在最流行的机器学习算法即神经网络。神经网络有很多种类型,这篇文章将介绍神经网络种最简单和基础的类型——多层感知机(MLP)

为什么需要神经网络

之前提到的机器学习算法,对于复杂的数据需要使用非线性的多项式项来拟合数据。假设我们有非常多的特征,例如大于100个变量,我们希望用这100个特征来构建一个非线性 的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合(𝑥1𝑥2+ 𝑥1𝑥3 +𝑥1𝑥4+...+𝑥2𝑥3 +𝑥2𝑥4+...+𝑥99𝑥100),我们也会有接近 5000 个组合而成的特征。这对于一般的机器学习算法来说需要计算的特征太多了。

如果我们使用一般的逻辑回归算法来进行图片分类。假使我们采用的都是 50x50 像素的小图片,并且我们将所有的像素视为特征,则会有 2500 个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约2500^2/2个 (接近3百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络

神经网络原理

如下图所示,经典的MLP神经网络包括输入层、隐藏层和输出层三层结构,且MLP神经网络不同层之间是全连接的(全连接的意思就是:上一层的任何一个神经元与下一层的所有神经元都有连接)。

假设我们需要区分图片是狗还是猫,同时输入的图片大小为50 * 50,那么神经网络的输入层则为 2500(50 * 50),其输出层为 2(猫或者狗)。

神经网络主要有三个基本要素,分别为:权重、偏置和激活函数

以上图为例,假设输入为 (x0,x1,x2,x3),那么对于隐藏层的节点1来说,其计算结果为 y0 = Sigmoid(a0 * x0 + a1 * x1 + a2 * x2 + a3 * x3 + bias) ,其中 bias 是偏置。依此类推, z0 = Sigmoid(b0 * y0 + b1 * y1 + b2 * y2 + bias)。

MLP的最经典例子就是数字识别,其识别过程如下图所示,图片来源这里

从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中, 我们被限制为使用数据中的原始特征𝑥1,𝑥2,...,𝑥𝑛,我们虽然可以使用一些二项式项来组合 这些特征,但是我们仍然受到这些原始特征的限制。在神经网络中,原始特征只是输入层, 在我们上面三层的神经网络例子中,第三层也就是输出层做出的预测利用的是第二层的特 征,而非输入层中的原始特征,我们可以认为第二层中的特征是神经网络通过学习后自己得 出的一系列用于预测输出变量的新特征。

MLP实现逻辑运算

神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、 逻辑或(OR)。

当下图的神经元(三个权重c0、c1、c2分别为-30,20,20)可以被视为作用同于逻辑与(AND)

下图的神经元(三个权重c0、c1、c2分别为-10,20,20)可以被视为作用等同于逻辑或(OR)

下图的神经元(两个权重c0、c1分别为 10,-20)可以被视为作用等同于逻辑非(NOT)

我们可以利用神经元来组合来实现XNOR 功能。三个权重c0、c1、c2分别为-30,20,20;三个权重d0、d1、d2分别为10,-20,-10;三个权重e0、e1、e2分别为-10,20,20。

示例

keras 是使用 python 编写的用于神经网络开发的应用接口,调用该接口可以实现神经网络、卷积神经网络、循环神经网络等常用的深度学习算法的开发。

keras的特点如下:

    集成了深度学习中各类成熟的算法,容易安装和使用,样例丰富,教程和文档也非常详细能够以 tensorflow 或者 theano 作为后端运行

我们可以使用keras来实现数字识别,代码示例如下:

#set up the modelfrom keras.models import Sequentialfrom keras.layers import Dense, Activationmlp = Sequential()mlp.add(Dense(units=392,activation='relu',input_dim=784))mlp.add(Dense(units=392,activation='relu'))mlp.add(Dense(units=10,activation='softmax'))#configure the modelmlp.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['categorical_accuracy'])#train the modelmlp.fit(X_train_normal,y_train_format,epochs=10)# 可视化数据import matplotlib as mlpfont2 = {'family' : 'SimHei','weight' : 'normal','size'   : 20,}mlp.rcParams['font.family'] = 'SimHei'mlp.rcParams['axes.unicode_minus'] = Falsea = [i for i in range(1,10)]fig4 = plt.figure(figsize=(5,5))for i in a:    plt.subplot(3,3,i)    plt.tight_layout()    plt.imshow(X_test[i])    plt.title('predict:{}'.format(y_test_predict[i]),font2)    plt.xticks([])    plt.yticks([])

效果如下图所示:

参考

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

神经网络 多层感知机 Keras 深度学习
相关文章