查看原文
其他

[Python人工智能] 一.白话神经网络和AI概念入门普及

Eastmount 娜璋AI安全之家 2022-11-30

从本篇文章开始,作者正式开始讲解Python深度学习、神经网络及人工智能相关知识,希望您喜欢。

第一篇文章主要讲解神经网络基础概念,主要结合作者之前的博客和"莫烦大神"的视频介绍,后面随着深入会讲解具体的项目及应用。基础性文章,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵。同时自己也是人工智能的菜鸟,希望大家能与我在这一笔一划的博客中成长起来。


文章目录:

  • 一.白话神经网络

  • 二.神经网络概念梳理

  • 三.总结


代码下载地址(欢迎大家关注点赞):

  • https://github.com/eastmountyxz/
    AI-for-TensorFlow

  • https://github.com/eastmountyxz/
    AI-for-Keras


学Python近八年,认识了很多大佬和朋友,感恩。由于在外求学且需要养娃,故在CSDN设置成了最低价收费专栏,觉得不错的可以购买抬爱;但作者的本意是帮助更多初学者入门,因此在github开源了所有代码,也在公众号同步更新。深知自己很菜,得拼命努力前行,编程也没有什么捷径,干就对了。希望未来能更透彻学习和撰写文章,也能在读博几年里学会真正的独立科研。同时非常感谢参考文献中的大佬们的文章和分享,共勉。

- https://blog.csdn.net/eastmount


一.白话神经网络

一部分将简单讲解"莫烦大神"网易云课程对神经网络的介绍,讲得清晰透彻,推荐大家阅读;第二部分将讲述我的理解。开始吧!让我们一起进入神经网络和TensorFlow的世界。

首先,什么是神经网络(Neural Networks)?
计算机神经网络是一种模仿生物神经网络或动物神经中枢,特别是大脑的结构和功能,它是一种数学模型或计算机模型。神经网络由大量的神经元连接并进行计算,大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应的过程。

现代神经网络是一种基于传统统计学建模的工具,常用来对输入和输出间复杂的关系进行建模,或探索数据间的模式,神经网络是一种运算模型,有大量的节点或神经元及其联系构成。和人类的神经元一样,它们负责传递信息和加工信息,神经元也能被训练或强化,形成固定的神经形态,对特殊的信息有更强烈的反应。

神经网络是如何工作的呢?
如上图所示,不管这是一只跳跃飞奔的猫,或是一只静静思考的猫,你都知道它是一只猫,因为你的大脑已经被告知过圆眼睛、毛茸茸、尖耳朵的就是猫,你通过成熟的视觉神经系统判断它是猫。

计算机也是一样,通过不断的训练,告诉哪些是猫、哪些是狗、哪些是猪,它们会通过数学模型来概括这些学习的判断,最终以数学的形式(0或1)来分类。目前,谷歌、百度图片搜索都能清晰识别事物,这些都归功于计算机神经系统的飞速发展。

神经网络系统由多层神经层构成,为了区分不同的神经层,我们分为:

  • 输入层:直接接收信息的神经层,比如接收一张猫的图片。

  • 输出层:信息在神经元中传递中转和分析权衡,形成输出结果,通过该层输出的结果可以看出计算机对事物的认知。

  • 隐藏层:在输入和输出层之间的众多神经元连接组成的各个层面,可以有多层,负责对传入信息的加工处理,经过多层加工才能衍生出对认知的理解。


神经网络举例说明
如下图所示,通常来说,计算机处理的东西和人类有所不同,无论是声音、图片还是文字,它们都只能以数字0或1出现在计算机神经网络里。神经网络看到的图片其实都是一堆数字,对数字的加工处理最终生成另一堆数字,并且具有一定认知上的意义,通过一点点的处理能够得知计算机到底判断这张图片是猫还是狗。

计算机是怎么训练的呢?
首先,需要很多的数据,比如需要计算机判断是猫还是狗,就需要准备上千万张有标记的图片,然后再进行上千万次的训练。计算机通过训练或强化学习判断猫,将获取的特征转换为数学的形式。

我们需要做的就是只给计算机看图片,然后让它给我们一个不成熟也不准确的答案,有可能100次答案中有10%是正确的。如果给计算机看图片是一张飞奔的猫(如下图),但计算机可能识别成一条狗,尽管它识别错误,但这个错误对计算机是非常有价值的,可以用这次错误的经验作为一名好老师,不断学习经验。

那么计算机是如何学习经验的呢?
它是通过对比预测答案和真实答案的差别,然后把这种差别再反向传递回去,修改神经元的权重,让每个神经元向正确的方向改动一点点,这样到下次识别时,通过所有改进的神经网络,计算机识别的正确率会有所提高。最终每一次的一点点,累加上千万次的训练,就会朝正确的方向上迈出一大步。

最后到验收结果的时候,给计算机再次显示猫的图片时,它就能正确预测这是一只猫。

激励函数是什么东东?
接着再进一步看看神经网络是怎么训练的。原来在计算机里每一个神经元都有属于它的激励函数(Active Function),我们可以利用这些激励函数给计算机一个刺激行为。当我们第一次给计算机看一只飞奔的猫时,神经网络中只有部分神经元被激活或激励,被激活传递下去的信息是计算机最为重视的信息,也是对输出结果最有价值的信息。

如果预测的结果是一只狗,所有神经元的参数就会被调整,这时有一些容易被激活的神经元就会变得迟钝,而另一些会变得敏感起来,这就说明了所有神经元参数正在被修改,变得对图片真正重要的信息敏感,从而被改动的参数就能渐渐预测出正确的答案,它就是一只猫。这就是神经网络的加工过程。

至此,神经网络简单的普及就介绍结束。



二.神经网络概念梳理

前面通过白话文讲述了神经网络之后,接下来我们对神经网络的概念从头再梳理一遍,这也是为后续深入学习奠定基础。

神经网络(也称人工神经网络,ANN)算法是80年代机器学习界非常流行的算法,不过在90年代中途衰落。现在,携着“深度学习”之势,神经网络重装归来,重新成为最强大的机器学习算法之一。

人工神经网络(Artificial Neural Network,缩写ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。其来源于生物,故吴老先先讲述了生物神经网络的基础知识,从而进行引入。

神经细胞通过轴突将信号传递给其他的神经细胞,通过树突向各个方向接受信号。

神经细胞利用电-化学过程交换信号。输入信号来自另一些神经细胞。这些神经细胞的轴突末梢(也就是终端)和本神经细胞的树突相遇形成突触(synapse),信号就从树突上的突触进入本细胞。

信号在大脑中实际怎样传输是一个相当复杂的过程,但就我们而言,重要的是把它看成和现代的计算机一样,利用一系列的0和1来进行操作。就是说,大脑的神经细胞也只有两种状态:兴奋(fire)和不兴奋(即抑制)。

神经细胞利用一种我们还不知道的方法,把所有从树突突触上进来的信号进行相加,如果全部信号的总和超过某个阈值,就会激发神经细胞进入兴奋(fire)状态,这时就会有一个电信号通过轴突发送出去给其他神经细胞。如果信号总和没有达到阈值,神经细胞就不会兴奋起来。这样的解释有点过分简单化,但已能满足我们的目的。

由于人脑具有以下几个特点:

  • 能实现无监督的学习
    大脑能够自己进行学习,而不需要导师的监督教导。如果一个神经细胞在一段时间内受到高频率的刺激,则它和输入信号的神经细胞之间的连接强度就会按某种过程改变,使得该神经细胞下一次受到激励时更容易兴奋。

  • 对损伤有冗余性(tolerance)
    大脑即使有很大一部分受到了损伤, 它仍然能够执行复杂的工作。

  • 处理信息的效率极高
    神经细胞之间电-化学信号的传递,与一台数字计算机中CPU的数据传输相比,速度是非常慢的,但因神经细胞采用了并行的工作方式,使得大脑能够同时处理大量的数据。例如,大脑视觉皮层在处理通过我们的视网膜输入的一幅图像信号时,大约只要100ms的时间就能完成,眼睛并发执行。

  • 善于归纳推广
    大脑和数字计算机不同,它极擅长的事情之一就是模式识别,并能根据已熟悉信息进行归纳推广(generlize)。例如,我们能够阅读他人所写的手稿上的文字,即使我们以前从来没见过他所写的东西。

  • 它是有意识的


如下图所示,它表示的是一个人工神经细胞。其中:

  • 输入(Input)

  • 权重(Weight):左边五个灰色圆底字母w代表浮点数

  • 激励函数(Activation Function):大圆,所有经过权重调整后的输入加起来,形成单个的激励值

  • 输出(Output):神经细胞的输出


进入人工神经细胞的每一个input(输入)都与一个权重w相联系,正是这些权重将决定神经网络的整体活跃性。假设权重为-1和1之间的一个随机数,权重可正可负(激发和抑制作用)。

当输入信号进入神经细胞时,它们的值将与它们对应的权重相乘,作为图中大圆的输入。如果激励值超过某个阀值(假设阀值为1.0),就会产生一个值为1的信号输出;如果激励值小于阀值1.0,则输出一个0。这是人工神经细胞激励函数的一种最简单的类型。涉及的数学知识如下图所示:

如果最后计算的结果激励值大于阈值1.0,则神经细胞就输出1;如果激励值小于阈值则输出0。这和一个生物神经细胞的兴奋状态或抑制状态是等价的。下面图是通过神经网络实现逻辑表达式与运算:(参考NG斯坦福机器学习讲义)

可以看到x1和x2变量作为神经网络的输入,当它们取不同的0或1值时,其结果通过sigmod函数计算的值是不同的。它模拟了整个AND运算。

该图中神经网络共有三层 ( 注意,输入层不是神经细胞,神经细胞只有两层 ):

  • 输入层中的每个输入都馈送到了隐藏层,作为该层每一个神经细胞的输入;然后,从隐藏层的每个神经细胞的输出都连到了它下一层(即输出层)的每一个神经细胞。

注意:

  • 图中仅仅画了一个隐藏层,作为前馈网络,一般地可以有任意多个隐藏层。但在对付你将处理的大多数问题时一层通常是足够的。

  • 事实上,有一些问题甚至根本不需要任何隐藏单元,你只要把那些输入直接连接到输出神经细胞就行了。

  • 每一层实际都可以有任何数目的神经细胞,这完全取决于要解决的问题的复杂性。但神经细胞数目愈多,网络的工作速度也就愈低,网络的规模总是要求保持尽可能的小。

神经网络体系创建成功后,它必须接受训练来认出数字4,方法:

  • 先把神经网络的所有权重初始化为任意值;

  • 再给它一系列输入代表面板不同配置的输入,对每种输入配置,检查它的输出是什么,并调整相应权重;

  • 如果我们送给网络的输入模式不是4,则我们知道网络应该输出一个0。因此每个非4字符时,网络权重应进行调整,使得它的输出趋向于0;当代表4的模式输送给网络时,则应把权重调整到使其输出趋向于1;

  • 可以进一步识别0到9的所有数字或字母,其本质是手写识别的工作原理;

  • 最后,网络不单能认识已经训练的笔迹,还显示了它有显著的归纳和推广能力。

正是这种归纳推广能力,使得神经网络已经成为能够用于无数应用的一种无价的工具,从人脸识别、医学诊断,直到跑马赛的预测,另外还有电脑游戏中的bot(作为游戏角色的机器人)的导航,或者硬件的robot(真正的机器人)的导航。


上图会演示神经网络在图像识别领域的一个著名应用,这个程序叫做LeNet,是一个基于多个隐层构建的神经网络。通过LeNet可以识别多种手写数字,并且达到很高的识别精度与拥有较好的鲁棒性。LeNet的发明人是机器学习的大牛Yann LeCun(目前google)。

右下方的方形中显示的是输入计算机的图像,方形上方的红色字样“answer”后面显示的是计算机的输出。左边的三条竖直的图像列显示的是神经网络中三个隐藏层的输出,可以看出,随着层次的不断深入,越深的层次处理的细节越低,例如层3基本处理的都已经是线的细节了。

这种类型的训练称作有监督的学习(supervised learnig),用来训练的数据称为训练集(training set)。调整权重可以采用许多不同的方法。对本类问题最常用的方法就是反向传播(backpropagation,简称backprop或BP)方法,即BP神经网络。

你自己可以去学习另外的一种训练方式,即根本不需要任何导师来监督的训练,或称无监督学习(unsupervised learnig)

下图是神经网络的简单回顾与总结:

最后给大家看一个利用神经网络对图片进行分类的例子:过程就不详细论述了,图片很清晰,对人、汽车、摩托车、卡车进行图片识别,而具体的隐藏层函数需要大家去深入研究,加油!

推荐书籍——《深度学习》花书,都是大佬,后面GAN我会详细介绍这几个作者的成就。


推荐课程:

  • 入门课程推荐一:CS231n(斯坦福大学 李飞飞教授)

  • 入门课程推荐二:CS224n(斯坦福大学 Christopher Manning教授)

  • 入门课程推荐三:《Deep Learning》(斯坦福大学 吴恩达大佬)

  • 入门课程推荐四:CS224w 图神经网络(斯坦福大学 Jurij Leskovec大佬)

  • 入门课程推荐五:李宏毅《机器学习》(B站视频)



三.总结

最后希望基础性文章对您有所帮助,作者也是这个领域的菜鸟一枚,希望与您共同进步,后续会继续深入分享Python人工智能系列,如果喜欢点个赞评论,共勉~

虽然非常忙,但每当看到博友的提问或交流都不忍拒绝,其实自己真的快忙疯了。看到这些大山走出去的学生,大一新生,求职研究生或遇到问题的朋友,都想帮他们一把,因为我们也是在很多人的帮助下成长起来的。而看到很多私活、广告、合作、出书之类的私信,我都会拒绝或不回时光飞逝,还有太多知识要去学习,太多陪伴要去争取,太多文字要去记录,且行且珍惜,最爱的人,晚安。

深知自己很菜,得努力前行。这半年来,原创博客越来越少,希望自己能在博士路上不断前行,多读论文,多写论文,多学新知识。加油!也祝所有在读博士都学有所成,勿忘来时的路,砥砺前行。最后还是那句话,人生路上,好好享受陪伴家人的日子,爱你们~

天行健,君子以自强不息。
地势坤,君子以厚德载物。

真诚地感谢您关注“娜璋之家”公众号,也希望我的文章能陪伴你成长,希望在技术路上不断前行。文章如果对你有帮助、有感悟,就是对我最好的回报,且看且珍惜!再次感谢您的关注,也请帮忙宣传下“娜璋之家”,初来乍到,还请多指教。

(By: Eastmount 2021-06-06 夜于武汉)



参考文献如下,感谢这些大佬!

  • 神经网络和机器学习基础入门分享 - Eastmount

  • Stanford机器学习—第五讲. 神经网络的学习 Neural Networks learning

  • 吴祖增前辈:神经网络入门(连载之一)

  • 吴祖增前辈:神经网络入门(连载之二)

  • 斯坦福机器学习视频NG教授: 

  • https://class.coursera.org/ml/class/index

  • 网易云莫烦老师视频(强推)

    https://study.163.com/course/courseLearn.htm?courseId=1003209007

  • https://zhuanlan.zhihu.com/p/148312957 - DrugAI好友

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存