㈠ 人工智能时代,神经网络的原理及使用方法 | 微课堂
人工智能时代已经悄然来临,在计算机技术高速发展的未来,机器是否能代替人脑?也许有些读者会说,永远不可能,因为散盯扮人脑的思考包含感性逻辑。事实上,神经网络算法正是在模仿人脑的思考方式。想不想知道神经网络是如何“思考”的呢?下面我向大家简单介绍一下神经网络的原理及使用方法。
所谓人工智能,就是让机器具备人的思维和意识。人工智能主要有三个学派——行为主义、符号主义和连接主义。
行为主义是基于控制论,是在构建感知动作的控制系统。理解行为主义有个很好的例子,就是让机器人单脚站立,通过感知要摔倒的方向控制两只手的动作,保持身体的平衡,这就构建了一个感知动作控制系统。
符号主义是基于算数逻辑和表达式。求解问题时,先把问题描述为表达式,再求解表达式。如果你在求解某个问题时,可以用if case这样的条件语句,和若干计算公式描述出来,这就使用了符号主义的方法,比如“专家系统”。符号主义可以认为是用公式描述的人工智能,它让计算机具备了理性思维。但是人类不仅具备理性思维,还具备无法用公式描述的感性思维。比如,如果你看过这篇推送,下回再见到“符号主义”几个字,你会觉得眼熟,会想到这是人工智能相关的知识,这是人的直觉,是感性的。
连接主义就是在模拟人的这种感性思维,是在仿造人脑内的神经元连接关系。这张图给出了人脑中的一根神经元,左侧是神经元的输入,“轴突”部分是神经元的输出。人脑就是由860亿个这样的神经元首尾相接组成的网络。
神经网络可以让计算机具备感性思维。我们首先理解一下基于连接主义的神经网络设计过程。这张图给出了人类从出生到24个月神经网络的变化:
随着我们的成长,大量的数据通过视觉、听觉涌入大脑,使我们的神经网络连接,也就是这些神经元连线上的权重发生了变化,有些线上的权重增强了,有些线上的权重减弱了。
我们要用计算机仿出这些神经网络连接关系,让计算机具备感性思维。
首先需要准备数据,数据量越大越好,以构成特征和标签对。如果想识别猫,就要有大量猫的图片和这张图片是猫的标签构成特征标签对,然后搭建神经网络的网络结构,再通过反向传播优化连接的权重,直到模型的识别准确率达到要求,得到最优的连线权重,把这个模型保存起来。最后用保存的模型输入从未见过的新数据,它会通过前向传播输出概率值,概率值最大的一个就是分类和预测的结果。
我们举个例子来感受一下神经网络的设计过程。鸢尾花可以分为三类:狗尾鸢尾、杂色鸢尾和佛吉尼亚鸢尾。我们拿出一张图,需要让计算机判断这是哪类鸢尾花。人们通过经验总结出了规律:通过测量花的花萼长、花萼宽、花瓣长、花瓣宽分辨出鸢尾花的类别,比如花萼长>花萼宽,并且花瓣长/花瓣宽>2,则可以判定为这是第一种,杂色鸢尾。看到这里,也许有些读者已经想到用if、case这样的条件语句来实现鸢尾花的分类。没错,条件语句根据这些信息可以判断鸢尾花分类,这是一个非常典型的专家系统,这个过程是理性计算。只要有了这些数据,就可以通过条件判定公式计算出是哪类鸢尾花。但是我们发现鸢尾花的种植者在识别鸢尾花的时候并不需要这么理性的计算,因为他们见识了太多的鸢尾花,一看就知道是哪种,而且随着经验的增加,识别的准确率会提高。这就是直觉,是感性思维,也是我们这篇文章想要和大家分享的神经网络方法。
这种神经网络设计过程首先需要采集大量的花萼长、花萼宽、花瓣长、花瓣宽,和它们所对应的是哪种鸢尾花。花萼长、花萼宽、花瓣长、花瓣宽叫做输入特征,它们对应的分类叫做标签。大量的输入特征和标签对构建出数据集,再把这个数据集喂入搭建好的神经网络结构,网络通过反向传播优化参数,得到模型。当有新的、从未见过的输入特征,送入神经网络时,神经网络会输出识别的结果。
展望21世纪初,在近十年神经网络理论研究趋向的背景下,神经网络理论的主要前沿领域包括:
一、对智能和机器关系问题的认识进一步增长。
研究人类智力一直是科学发展中最有意义,也是空前困难的挑冲灶战性问题。人脑是我们所知道的唯一则带智能系统,具有感知识别、学习、联想、记忆、推理等智能。我们通过不断 探索 人类智能的本质以及联结机制,并用人工系统复现或部分复现,制造各种智能机器,这样可使人类有更多的时间和机会从事更为复杂、更富创造性的工作。
神经网络是由大量处理单元组成的非线性、自适应、自组织系统,是在现代神经科学研究成果的基础上提出的,试图模拟神经网络加工、记忆信息的方式,设计一种新的机器,使之具有人脑风格的信息处理能力。智能理论所面对的课题来自“环境——问题——目的”,有极大的诱惑力与压力,它的发展方向将是把基于连接主义的神经网络理论、基于符号主义的人工智能专家系统理论和基于进化论的人工生命这三大研究领域,在共同追求的总目标下,自发而有机地结合起来。
二、神经计算和进化计算的重大发展。
计算和算法是人类自古以来十分重视的研究领域,本世纪30年代,符号逻辑方面的研究非常活跃。近年来,神经计算和进化计算领域很活跃,有新的发展动向,在从系统层次向细胞层次转化里,正在建立数学理论基础。随着人们不断 探索 新的计算和算法,将推动计算理论向计算智能化方向发展,在21世纪人类将全面进入信息 社会 ,对信息的获取、处理和传输问题,对网络路由优化问题,对数据安全和保密问题等等将有新的要求,这些将成为 社会 运行的首要任务。因此,神经计算和进化计算与高速信息网络理论联系将更加密切,并在计算机网络领域中发挥巨大的作用,例如大范围计算机网络的自组织功能实现就要进行进化计算。
人类的思维方式正在转变,从线性思维转到非线性思维神经元,神经网络都有非线性、非局域性、非定常性、非凸性和混沌等特性。我们在计算智能的层次上研究非线性动力系统、混沌神经网络以及对神经网络的数理研究,进一步研究自适应性子波、非线性神经场的兴奋模式、神经集团的宏观力学等。因为,非线性问题的研究是神经网络理论发展的一个最大动力,也是它面临的最大挑战。
以上就是有关神经网络的相关内容,希望能为读者带来帮助。
以上内容由苏州空天信息研究院谢雨宏提供。
㈡ SPSS统计分析案例:多层感知器神经网络
SPSS统计分析案例:多层感知器神经网络
神经网络模型起源于对人类大脑思维模式的研究,它是一个非线性的数据建模工具, 由输入层和输出层、 一个或者多个隐藏层构成神经元,神经元之间的连接赋予相关的权重, 训练学习算法在迭代过程中不断调整这些权重,从而使得预测误差最小化并给出预测精度。
在SPSS神经网络中,包括多层感知器(MLP)和径向基函数(RBF)两种方法。
本期主要学习多层感知器神经网络,要把它讲清楚是比较困难的,为了能直观感受它的功能,首先以一个案例开始,最后再总结知识。
案例数据
该数据文件涉及某银行在降低贷款拖欠率方面的举措。该文件包含 700 位过去曾获得贷款的客户财务和人口统计信息。请使用这 700 名客户的随机样本创建多层感知器神经网络模型。银行需要此模型对新的客户数据按高或低信用风险对他们进行分类。
第一次分析:菜单参数
要运行“多层感知器”分析,请从菜单中选择:
分析 > 神经网络 > 多层感知器
如上图所示,MLP主面板共有8个选项卡,至少需要设置其中"变量"、"分区"、"输出"、"保存"、"导出"等5个选项卡,其他接受软件默认设置。
▌ "变量"选项卡
将"是否拖欠"移入因变量框;
将分类变量"学历"移入因子框,其他数值变量移入"协变量"框;
因各协变量量纲不同,选择"标准化"处理;
▌ "分区"选项卡
在此之前,首先在 "转换 > 随机数生成器"菜单中设置随机数固定种子为9191972(此处同SPSS官方文档,用户可以自由设定),因为"分区"选项卡中,要求对原始数据文件进行随机化抽样,将数据划分为"训练样本"、"支持样本"、"检验样本"3个区块,为了随机过程可重复,所以此处指定固定种子一枚;
初次建模,先抽样70%作为训练样本,用于完成自学习构建神经网络模型,30%作为支持样本,用于评估所建立模型的性能,暂不分配检验样本;
▌ "输出"选项卡
勾选"描述"、"图";
勾选"模型摘要"、"分类结果"、"预测实测图";
勾选"个案处理摘要";
构成"自变量重要性分析";
这是第一次尝试性的分析,主要参数设置如上,其他选项卡接受软件默认设置,最后返回主面板,点击"确定"按钮,软件开始执行MLP过程。
第一次分析产生的结果:
主要看重点的结果,依次如下:
个案处理摘要表,700个贷款客户的记录,其中480个客户被分配到训练样本,占比68.6%,另外220个客户分配为支持样本。
模型摘要表,首次构建的MLP神经网络模型其不正确预测百分比为12.7%,独立的支持样本检验模型的不正确百分比为20.9%,提示"超出最大时程数",模型非正常规则中止,显示有过度学习的嫌疑。
判断:首次建立的模型需要预防过度训练。
第二次分析:菜单参数
首次分析怀疑训练过度,所以第二次分析主要是新增检验样本以及输出最终的模型结果。
运行“多层感知器”分析,请从菜单中选择:
分析 > 神经网络 > 多层感知器
▌ "分区"选项卡
对样本进行重新分配,总700样本,支持样本继续30%,训练样本由原来的70%缩减至50%,另外的20%分配给独立的检验样本空间;
▌ "保存"选项卡
保存每个因变量的预测值或类别;
保存每个因变量的预测拟概率;
▌ "导出"选项卡
将突触权重估算值导出到XML文件;
给XML模型文件起名并制定存放路径;
其他选项卡的操作和第一次分析保持一致。返回主面板,点击"确定"开始执行第二次分析。
第一次分析产生的结果:
总样本在3个分区的分配比例。
MLP神经网络图,模型包括1个输入层、1个隐藏层和1个输出层,输入层神经元个数12个,隐藏层9个,输出层2个。
模型摘要表,模型误差在1个连续步骤中未出现优化减少现象,模型按预定中止。模型在3个分区中的不正确预测百分比较接近。
模型分类表,软件默认采用0.5作为正确和错误的概率分界,将3大分区样本的正确率进行交叉对比,显示出预测为NO,即预测为不拖欠的概率高于拖欠,模型对有拖欠的贷款客户风险识别能力较低。
预测-实测图,按照贷款客户是否拖欠与预测结果进行分组,纵坐标为预测概率。以0.5为分界时,对优质客户的识别效果较好,但是有较大的概率在识别有拖欠客户上出错。
显然以0.5作为分界并不是最优解,可以尝试将分界下移至0.3左右,此操作会使第四个箱图中大量欠贷客户正确地重新分类为欠贷者,提高风险识别能力。
自变量重要性图,重要性图为重要性表格中值的条形图,以重要性值降序排序。其显示与客户稳定性(employ、address)和负债(creddebt、debtinc)相关的变量对于网络如何对客户进行分类有重大影响;
最后来看导出的XML模型文件:
以XML文件存储了第二次构建的MLP神经网络模型,可以用于新客户的分类和风险识别。
新客户分类
假设现在有150名新客户,现在需要采用此前建立的模型,对这些客户进行快速的风险分类和识别。
打开新客户数据,菜单中选择:
实用程序 > 评分向导
型"XML文件,点击"下一步":
检查新数据文件变量的定义是否准确。下一步。
选择输出"预测类别的概率"、"预测值"。完成。
新客户数据文件新增3列,分别给出每一个新客户的预测概率和风险分类(是否欠贷)。
多层感知器神经网络 总结
一种前馈式有监督的学习技术;
多层感知器可以发现极为复杂的关系;
如果因变量是分类型,神经网络会根据输入数据,将记录划分为最适合的类别;
如果因变量是连续型,神将网络预测的连续值是输入数据的某个连续函数;
建议创建训练-检验-支持三个分区,网络训练学习将更有效;
可将模型导出成 XML 格式对新的数据进行打分;
㈢ 一文读懂神经网络
要说近几年最引人注目的技术,无疑的,非人工智能莫属。无论你是否身处科技互联网行业,随处可见人工智能的身影:从 AlphaGo 击败世界围棋冠军,到无人驾驶概念的兴起,再到科技巨头 All in AI,以及各大高校向社会输送海量的人工智能专业的毕业生。以至于人们开始萌生一个想法:新的革命就要来了,我们的世界将再次发生一次巨变;而后开始焦虑:我的工作是否会被机器取代?我该如何才能抓住这次革命?
人工智能背后的核心技术是深度神经网络(Deep Neural Network),大概是一年前这个时候,我正在回老家的高铁上学习 3Blue1Brown 的 Neural Network 系列视频课程,短短 4 集 60 多分钟的时间,就把神经网络从 High Level 到推导细节说得清清楚楚,当时的我除了获得新知的兴奋之外,还有一点新的认知,算是给头脑中的革命性的技术泼了盆冷水:神经网络可以解决一些复杂的、以前很难通过写程序来完成的任务——例如图像、语音识别等,但它的实现机制告诉我,神经网络依然没有达到生物级别的智能,短期内期待它来取代人也是不可能的。
一年后的今天,依然在这个春运的时间点,将我对神经网络的理解写下来,算是对这部分知识的一个学习笔记,运气好的话,还可以让不了解神经网络的同学了解起来。
维基网络这样解释 神经网络 :
这个定义比较宽泛,你甚至还可以用它来定义其它的机器学习算法,例如之前我们一起学习的逻辑回归和 GBDT 决策树。下面我们具体一点,下图是一个逻辑回归的示意图:
其中 x1 和 x2 表示输入,w1 和 w2 是模型的参数,z 是一个线性函数:
接着我们对 z 做一个 sigmod 变换(图中蓝色圆),得到输出 y:
其实,上面的逻辑回归就可以看成是一个只有 1 层 输入层 , 1 层 输出层 的神经网络,图中容纳数字的圈儿被称作 神经元 ;其中,层与层之间的连接 w1、w2 以及 b,是这个 神经网络的参数 ,层之间如果每个神经元之间都保持着连接,这样的层被称为 全连接层 (Full Connection Layer),或 稠密层 (Dense Layer);此外,sigmoid 函数又被称作 激活函数 (Activation Function),除了 sigmoid 外,常用的激活函数还有 ReLU、tanh 函数等,这些函数都起到将线性函数进行非线性变换的作用。我们还剩下一个重要的概念: 隐藏层 ,它需要把 2 个以上的逻辑回归叠加起来加以说明:
如上图所示,除输入层和输出层以外,其他的层都叫做 隐藏层 。如果我们多叠加几层,这个神经网络又可以被称作 深度神经网络 (Deep Neural Network),有同学可能会问多少层才算“深”呢?这个没有绝对的定论,个人认为 3 层以上就算吧:)
以上,便是神经网络,以及神经网络中包含的概念,可见,神经网络并不特别,广义上讲,它就是
可见,神经网络和人脑神经也没有任何关联,如果我们说起它的另一个名字—— 多层感知机(Mutilayer Perceptron) ,就更不会觉得有多么玄乎了,多层感知机创造于 80 年代,可为什么直到 30 年后的今天才爆发呢?你想得没错,因为改了个名字……开个玩笑;实际上深度学习这项技术也经历过很长一段时间的黑暗低谷期,直到人们开始利用 GPU 来极大的提升训练模型的速度,以及几个标志性的事件:如 AlphaGo战胜李世石、Google 开源 TensorFlow 框架等等,感兴趣的同学可以翻一下这里的历史。
就拿上图中的 3 个逻辑回归组成的神经网络作为例子,它和普通的逻辑回归比起来,有什么优势呢?我们先来看下单逻辑回归有什么劣势,对于某些情况来说,逻辑回归可能永远无法使其分类,如下面数据:
这 4 个样本画在坐标系中如下图所示
因为逻辑回归的决策边界(Decision Boundary)是一条直线,所以上图中的两个分类,无论你怎么做,都无法找到一条直线将它们分开,但如果借助神经网络,就可以做到这一点。
由 3 个逻辑回归组成的网络(这里先忽略 bias)如下:
观察整个网络的计算过程,在进入输出层之前,该网络所做的计算实际上是:
即把输入先做了一次线性变换(Linear Transformation),得到 [z1, z2] ,再把 [z1, z2] 做了一个非线性变换(sigmoid),得到 [x1', x2'] ,(线性变换的概念可以参考 这个视频 )。从这里开始,后面的操作就和一个普通的逻辑回归没有任何差别了,所以它们的差异在于: 我们的数据在输入到模型之前,先做了一层特征变换处理(Feature Transformation,有时又叫做特征抽取 Feature Extraction),使之前不可能被分类的数据变得可以分类了 。
我们继续来看下特征变换的效果,假设 为 ,带入上述公式,算出 4 个样本对应的 [x1', x2'] 如下:
再将变换后的 4 个点绘制在坐标系中:
显然,在做了特征变换之后,这两个分类就可以很容易的被一条决策边界分开了。
所以, 神经网络的优势在于,它可以帮助我们自动的完成特征变换或特征提取 ,尤其对于声音、图像等复杂问题,因为在面对这些问题时,人们很难清晰明确的告诉你,哪些特征是有用的。
在解决特征变换的同时,神经网络也引入了新的问题,就是我们需要设计各式各样的网络结构来针对性的应对不同的场景,例如使用卷积神经网络(CNN)来处理图像、使用长短期记忆网络(LSTM)来处理序列问题、使用生成式对抗网络(GAN)来写诗和作图等,就连去年自然语言处理(NLP)中取得突破性进展的 Transformer/Bert 也是一种特定的网络结构。所以, 学好神经网络,对理解其他更高级的网络结构也是有帮助的 。
上面说了,神经网络可以看作一个非线性函数,该函数的参数是连接神经元的所有的 Weights 和 Biases,该函数可以简写为 f(W, B) ,以手写数字识别的任务作为例子:识别 MNIST 数据集 中的数字,数据集(MNIST 数据集是深度学习中的 HelloWorld)包含上万张不同的人写的数字图片,共有 0-9 十种数字,每张图片为 28*28=784 个像素,我们设计一个这样的网络来完成该任务:
把该网络函数所具备的属性补齐:
接下来的问题是,这个函数是如何产生的?这个问题本质上问的是这些参数的值是怎么确定的。
在机器学习中,有另一个函数 c 来衡量 f 的好坏,c 的参数是一堆数据集,你输入给 c 一批 Weights 和 Biases,c 输出 Bad 或 Good,当结果是 Bad 时,你需要继续调整 f 的 Weights 和 Biases,再次输入给 c,如此往复,直到 c 给出 Good 为止,这个 c 就是损失函数 Cost Function(或 Loss Function)。在手写数字识别的列子中,c 可以描述如下:
可见,要完成手写数字识别任务,只需要调整这 12730 个参数,让损失函数输出一个足够小的值即可,推而广之,绝大部分神经网络、机器学习的问题,都可以看成是定义损失函数、以及参数调优的问题。
在手写识别任务中,我们既可以使用交叉熵(Cross Entropy)损失函数,也可以使用 MSE(Mean Squared Error)作为损失函数,接下来,就剩下如何调优参数了。
神经网络的参数调优也没有使用特别的技术,依然是大家刚接触机器学习,就学到的梯度下降算法,梯度下降解决了上面迭代过程中的遗留问题——当损失函数给出 Bad 结果时,如何调整参数,能让 Loss 减少得最快。
梯度可以理解为:
把 Loss 对应到 H,12730 个参数对应到 (x,y),则 Loss 对所有参数的梯度可以表示为下面向量,该向量的长度为 12730:
$$
abla L(w,b) = left[
frac{partial L}{partial w_1},
frac{partial L}{partial w_2},...,
frac{partial L}{partial b_{26}}
ight] ^ op
$$
所以,每次迭代过程可以概括为
用梯度来调整参数的式子如下(为了简化,这里省略了 bias):
上式中, 是学习率,意为每次朝下降最快的方向前进一小步,避免优化过头(Overshoot)。
由于神经网络参数繁多,所以需要更高效的计算梯度的算法,于是,反向传播算法(Backpropagation)呼之欲出。
在学习反向传播算法之前,我们先复习一下微积分中的链式法则(Chain Rule):设 g = u(h) , h = f(x) 是两个可导函数,x 的一个很小的变化 △x 会使 h 产生一个很小的变化 △h,从而 g 也产生一个较小的变化 △g,现要求 △g/△x,可以使用链式法则:
有了以上基础,理解反向传播算法就简单了。
假设我们的演示网络只有 2 层,输入输出都只有 2 个神经元,如下图所示:
其中 是输入, 是输出, 是样本的目标值,这里使用的损失函数 L 为 MSE;图中的上标 (1) 或 (2) 分别表示参数属于第 (1) 层或第 (2) 层,下标 1 或 2 分别表示该层的第 1 或 第 2 个神经元。
现在我们来计算 和 ,掌握了这 2 个参数的偏导数计算之后,整个梯度的计算就掌握了。
所谓反向传播算法,指的是从右向左来计算每个参数的偏导数,先计算 ,根据链式法则
对左边项用链式法则展开
又 是输出值, 可以直接通过 MSE 的导数算出:
而 ,则 就是 sigmoid 函数的导数在 处的值,即
于是 就算出来了:
再来看 这一项,因为
所以
注意:上面式子对于所有的 和 都成立,且结果非常直观,即 对 的偏导为左边的输入 的大小;同时,这里还隐含着另一层意思:需要调整哪个 来影响 ,才能使 Loss 下降得最快,从该式子可以看出,当然是先调整较大的 值所对应的 ,效果才最显著 。
于是,最后一层参数 的偏导数就算出来了
我们再来算上一层的 ,根据链式法则 :
继续展开左边这一项
你发现没有,这几乎和计算最后一层一摸一样,但需要注意的是,这里的 对 Loss 造成的影响有多条路径,于是对于只有 2 个输出的本例来说:
上式中, 都已经在最后一层算出,下面我们来看下 ,因为
于是
同理
注意:这里也引申出梯度下降的调参直觉:即要使 Loss 下降得最快,优先调整 weight 值比较大的 weight。
至此, 也算出来了
观察上式, 所谓每个参数的偏导数,通过反向传播算法,都可以转换成线性加权(Weighted Sum)计算 ,归纳如下:
式子中 n 代表分类数,(l) 表示第 l 层,i 表示第 l 层的第 i 个神经元。 既然反向传播就是一个线性加权,那整个神经网络就可以借助于 GPU 的矩阵并行计算了 。
最后,当你明白了神经网络的原理,是不是越发的认为,它就是在做一堆的微积分运算,当然,作为能证明一个人是否学过微积分,神经网络还是值得学一下的。Just kidding ..
本文我们通过
这四点,全面的学习了神经网络这个知识点,希望本文能给你带来帮助。
参考: