咱们总有一种感觉,机器学习门槛高、难入门。这是由于这儿有太多晦涩的概念「神经网络」、「点评方针」、「优化算法」等让初学者老是有种盲人摸象的感觉。乃至连了解一个 Tensorflow 官方 Demo 都感觉费劲,因而不少开发者就有过「机器学习从入门到抛弃」的阅历。
本文站在大局视角,经过剖析一个 TensorFlow 官方的 Dey a , D f & emo 来到达俯视一个「机器学! r N l +习」体系的作用,然后让_ A ] l { | l 3读者看清这个头大象的全貌,协助初学者入门「机器学习」。
怎样了解机器学习体系
「机器学习」的方针便是运用已有答案来寻觅z z j m h : =规矩,然后做出猜测。
这 ; H 3 D与「传统体系」的差异在于:
- 「传统体系」的方针是取得答案
- 「机器学习」的方针是运用已有答案取得规矩
正是t { ( m ( ] A由于「机器学习」的方针是取得规矩,人们便能够拿` } I U 7 G & r ~它来做各种猜测:股票走势、彩票号码、服饰推荐、乃至猜测职工何时离职。
图片辨认本质上也是找到规矩。比如要辨认一张图片物体是否有一只猫咪,那么胡须、耳朵、绒毛+ R F s @ 2 =等都能够作为猫咪的特征值,而界说特征值便是在界说成为1 c & w 8 ^ ! _一只猫的组成规矩。
详解一个机器学习 Demo
学习一项技能最好方法便是u } q g u s去运用它。这部分咱们来看一个 TensorFlow De{ S O s S Emo。Tens_ P ? | ~ w m rorFlow 是 Google 推出的深度学习框架,根本信息我就不多做介绍了。
我要介绍的是怎样读懂这个 Demo。你可能会问,一个 Demo 有那么难明么?
关h p r 5 H O w *于「机器学习」的初学者来说,如若不懂「神经网络」、「丢失函数」、「点评方针」等概念,还真是挺难读懂一个 Demo 的。
看下这个 Demo,代e ! e |码不多,我悉数贴出来了。
看到这部分代码的全貌,什么感觉?
我榜首次读到的感觉是:「语法都能看懂,但便是不知道你这是要干啥!」
假设你也有这样的感觉,那么我主张你认真把这篇文章读完。+ q ,
这个 Demo 实际上是要练习一L 9 $ ~ P个能够辨认手写数p | U T S : p字的模型(MoN o { 3 _ – X ddel), 要辨认的手写数字长这样:
你或许一下子会有许多问号。手写数字? 图片在哪?怎样辨认?
别急,下面我来为咱们详解这个 Demo。
数据准M M !备
人工智能范畴中的数据是什么?咱们从 TensorFlow 这个框架的姓名中就能看出来 — Tensor(张量)形成的 Flow(流)。
在「人工智能」范畴,绝大部分数据都{ Q h是以 Tensor 的方法存在,而 Tensor 能够直接了解成多维数组。
举+ X 3 n @个例子: 要把一张图片输入到人工智能模型中。
咱们榜首反应是要先把图片H z i G 7 $ G数字化,用 Base64 来表明这张图、或许用二进制等等。但是关于人工智能体系,最佳方法是把图片转换成 Tensor。
咱们试试用 Tensor 来表明一张 像素 3*3 、背景为白色、对角线为黑色的图片:
运行代码之后,咱们就得到了那张对角线是_ p K { @ % 9 Z黑色的 33 图片。
这便是用一个四阶 Tensor 表明一张图片,Tensor 形状为 (1, 3, 3R J l q 4)
。
同理假设要表明 6000 张 2828 的图片,那么 Tensor 的形状便是 (6000, 28, 28)
。
现在咱们阅读榜首部分的代码:
「MNISTe 2 U S C n」(Mixed NK 4 P ^ u X M @ational Institute of Standards and Technology databa5 ) s 0 / n Q p pse) 是美国国家规范与技能研究院收集整理的0 m K 8 g 8大型手写数字数据库,包括 60,000 个示例的练习集以及 10,000 个示例的测验集,里边的图片长这样。
这些图片都是经过空间的矩阵的方法存储的:
这样咱们就明白这段代码的意思了,是从 mnistg i [ x ~ + ( 中获取用于练习的的数据集集( x_trian,y_train ),以及用于测验的数据集( x_test,y_test )。
- x_trian 形状为 (6000, 28, 28) ,表明 6000 张 28*28的图片。
- _trian 形状为 (6000,),表明 x_train 对应的数字答案。
模型(model)是什8 w @ = n 3 J a么
得到了数据集之后,是不是能够开端训模型了?别急,咱们要搞清楚[ n v模型是什么,Tensorflow 文档是这样界说模型:
在机器学习中,模型( Model )是一个具有可学习参数的函数,它将输入映射到输出。最优参数是经过在数+ n q & m x h U z据上练习模型取得的。一个练习有素的模型将供给从输入到所需输出的精确映射。
我来帮你们y n 0 | V翻译一下这个界u d N H说:模型是个函数,这儿m L @ s h ) G边内置了许多参数,这些参数的值会直接影响模型的输j ; [ | * 7 Z P出成果。有意思的是这些参U $ ~ W 8 V m数都是可学习的,它们能够依据练习数据的来进行调整来到达一组最优值,使得模型的输出作用最理想。
- 那么模型里参数又是什么?
- Demo 当中模型传入的 4 个Layer 又是什么含义?
- 模型又是怎样练习的?
想要知道这些问题答案,那么:「先生小姐,泳泳健身,呃不。神经网络,了解H R Y K ( h F C一下」
神经网络 ( Neural Network )
神经网络 ( Neural Network )望文生义,便是用神经元 ( Neuron )衔接而成[ 9 S X l的网络( Network )。
那么什么是神经元?
机器学习中的神经元( Neuron ) 源于生物神经网络 — 经过电位改变表明“兴奋”的生物神经元。
在机器学习范畴,一个神经元其实是一个核算单H E 4 O r k b V b元。它需求被输入N 个信号后开端核算(兴奋),这些信号经过带: ] I h权重(weights)的衔接R . $ F T ^传w b C $ j } 8递给了神经元,神经元经过加权求和,核算出一个值。然后这个值会经过激活函数( ac, t F s !tivation funct$ % pion )的处理,发生输出,通常是被压缩在 0~1 之间的数字。
Demo 当中,榜首个 Layer 便是把便是把 28*28 的图片展开成一个包3 4 v | f 6 + e F括 784 个神经元一维数组。
...
# 榜首个 Layer
# 神经元展开成一维数组
tf.keras.layers
.Flatten(input_shape=(28, 28)),
...
第二个 Layer:
...
tf.kern ) ~ =as.layers
.Dense(128, activation='relu'),
...
Layer2 传入了参数 activation='relu'
,意思是用 relu 作为激活函数 。
咱们先来了解下什么是「激活函数」,
当咱们的大脑一起接收到很多信息时,它会尽力了解并将信息分为 “有用 “和 “不那么有用 “的信息。在神经网络的情况下,咱们需求一个相似的机制来将y ~ + x E输入的信息分为 「有用 」或 S A & | 5 /“「不太有用」。
这对机器学习很6 n n $ V 8 o i U重要,由于不是所有的信息] I j S都是相同有用的,有些信息仅仅噪音。这便是激活函数的作用,激活函数协助网络运用重要的信息,抑制不相关的数据点。
例如 Demo 中,Layer1 输出 784 个神经元,并不S V b i & X ; O是悉数激活的。而只有激活神经元才能对 Layer2 发生刺激,而 layer4 输出10个神经元,其中第 2 个神经元激活,表明辨认成果为 1 的概率是 99%。
所以 relu 是9 7 D % h激活函数的一种,p x N n用于神经元的激活 — 依据上一个 Layer 给予的刺激算出神经元终究输出(显示)的那个数字。
Layer2 层有 128个神经元,这128个神经元会和 Layer1 中 728 个神经元相互衔接,共将发生 728 * 128 =93184
权重(weights)各自不同的衔接 。Layer1 中神经元的输出将与衔接到 layer2 的权重值进行加权求和,得到的成果会被带入 relu
函数,终究输出一个新的值作为 Layer2 中神经元的输出。
第三个 Layer
...
tf.keras.layeu _ U 5 I L qrs.Dropout(0.2),
DX l 0 Iropout layer 的首要作用便是防止过度拟合。过渡拟合现象首要表现是:终究模型在练习集上作用好;在测验集上作用差。模$ $ e l型泛化才能弱。
Dropout 解决过度拟合的办d c R T法之一,便是随机丢掉一部神经元。Demo 中便是运用 Dropout 随q ^ {机丢掉 20% 神经元。
第四个 Layer
...t
tf.keras.la| ! dyers
.Dense(10, activation='softmax')
...
Layer4 上有 10 个神经元,并2 c I h 0运用 softmax
作为激活函数,这 10个神经元的输出便是终究结的成果。下图为辨认一个手写数字 1 的整个过程,各层神经元逐层激活,终究输出猜测成果。
到这儿,咱们经过了解 4 个LaK # / 4yer之间K D 4的作用关4 R ) ! + +系简略的了解了一个神经网络的运作方法。
模型练习弥补
要读懂这段代码,咱们要先经过一个类比来了解下什么是: 丢失函数( Loss Function )、优化算法( Optimization Algorithms )、点评方针( EvaR ~ luat ] E p P q b Dion Metrics )
假设一名男人要开端锻炼身体,方针是胸围到达 120cm,且身段看起? U H C 7 – ! H 1来匀称(别太壮):
- 经过反复练习,他的胸围到达了– E 4 110cm,那么D d p o s咱们能够把
Loss = |方针(120cm)- 当前(110cm)|
作为一个最简略的**丢失函数(Loss Function)。**而 Demo 中的 Loss Function 用的是 – 稀疏类别交叉熵(sparse_categorical_crossentroG O s k k G mpy),这个算法的特点便是擅长分类。 - 是否到达方针,不能仅仅运用丢失函数来判别c ; , = } |。身段匀称、美观也很重要,而点评方针(Evaluation Metrics )的作用就给咱们供给了一个评判规范。
- 接下来咱们就要寻觅发生 Loss 的规律,Loss 不仅仅是胸围小于 130cm 的丢失,胸围大G u M n于 130cm 而导致美感丢失也是 Loss 的一部分。因而想到达最佳作用,既不能练的太轻也不能K 0 X ) T D练的太用力。B F t d 9 a & i G咱们给予练习要素不同的权重( Weights ),蛋白质弥补权重为w0、胸肌上沿练习强度w1、胸肌中部练习强度w2、胸z & – # r I肌下沿练习强度w3、有氧运动练习强度w4 ,等等的影响要素咱们都加上不同的权重。终究得到一组 [w1, w2…wn] 。而经过不断0 D e调整[w1, w2…wn] 得出最佳胸肌锻炼的方法,便是优化算法( Optimization Algorithms )。
了神经网络的模型、层、权重、优化算法、丢失函数以及点评方针等之@ . Y m % $ : 2 ,后,咱们就能够读懂 Demo 中那段代码了。现在测验画一张神经网络的作业流程图,串一串一个神经网络的作业流程。
练习` – t I与测验
这部分很好了解,带入数据练习、测验就好。
说一下 ep0 f o Yochs
。
在神经网) S r x t ` H v P络范畴,一个 epoch 是指整个练习数据集的练习一个周期。
1 epoc? i A r x ? S O oh = 1正向传达( forward pass )+ 1 反向传达( backward p$ c ) j l aass )(咱们能够简略的了解,正向传0 n 7 l ` # w b p达意图是为了取得猜测成果,反向传达意图是调整到最优的权重(weights),来让 Loss 最小化。)
Demo 中 epochs = 5 是d O X u a p 3由于 1@ y . f u次 epoch 很可能得不到最优的权重(weig# # ( | d u 5hts)。 已然 1 次不能满意,那就 5 次,+ , H Y 8 %5 次还不满意就 10 次,直到作用最小化 Loss 的作用不再? E . V z D %改变。
总结
假设认真阅读了本文,那么我相信你已经对人工智能已经有了一点全体的知道,本文给了你一个俯瞰人工智能的视角,摆脱了盲人摸象的感觉。这虽然不是魔法,能立刻 / Y t A p { # –把你变成人工智能大神,但对根本架构的进一步了解会增强你对人工智能的自学才能。无论你是从事前端、后端、全栈等技能开发者,或许仅仅对人工智能感兴趣,我都希望本文能够带给你一个新的视角去了解人工智能,让你读有所思l p C ;,思有5 p U @ ) 5所得,得有所想,想有所获,或有所益。
文章源码
假设你在阅读之后认为本文对你有协助,请点关注我的公众号「东泽聊技能」,不堪感谢。