Press "Enter" to skip to content

Keras 教学 – 机器学习与类神经网路

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

最近在研究 Keras 与深度学习,顺便记录一下学习的过程 ( 完整 Keras 投影片 )。现在网路上已经有很多的资源可以帮助我们进行 Machine Learning,像是 GPU 可以用CoLab 提供的 P100 来训练,足够应付一般的实验工作。如果要训练比较庞大的影像资料,还是自己买 GPU 或租用云端 MaaS 服务吧,不然免费的 CoLab 稳定性不太够,而且只有一颗 GPU。因为学习心得有点多,内容可能会分几篇文章进行介绍。废话说完,那就先开始吧……

 

Keras 是什麽?

 

Keras 是近年火红的 Machine Learning 函式库,也是一个开源专案,透过 Python 实做的深度学习高阶 API 函式库。採用 MIT License,主要作者维护者是 Google 工程师 François Chollet。在 GitHub Keras Project 获得超多的 Star 与 Fork。

 

 

Keras 拥有以下特性:

相同的程式码可以在 CPU 或 GPU 上执行
提供 API 快速建构神经网路雏型
内建函式库支援卷神经网路、循环神经网路以及任何组合
可建构任何形式的深度学习模型,包含对抗神经网路、神经图灵机
内建 Play Dataset,可以进行一些演算法的实验

架构如下:

https://www.slideshare.net/databricks/a-tale-of-three-deep-learning-frameworks-tensorflow-keras-and-deep-learning-pipelines-with-brooke-wenig-and-jules-damji

 

为什麽现在「深度学习」高速发展?

 

类神经网路的概念很久以前就已经被提出,早期计算机运算能力有限,那时候只能解决简单问题,比如训练一个 XOR 互斥或闸 (XOR Problem) 这样的问题。如今伴随科技的进步,以往複杂的问题所需要的大量运算,逐渐被克服,以下几点也是近年来 Machine Learning 发展迅速的主因:

硬体设备提昇:GPU, CUDA 平行运算 (Nvidia)
:伴随网路发展产生大量的资料、标记内容
演算法:更好的启动函数、更好的权重初始化方法、更好的最佳化方式

其中我认为半导体的技术发展是最大的推手,利用半导体发展 AI 运算专用的晶片,或者未来实现 In-memory Processing 这样的晶片架构,都会大幅提昇 AI 解决问题与应用的能力。

 

机器学习的基本概念

 

如果你跟我一样也是个程式 (Bug) 设计师,那幺我们平常的工作应该是:

 

 

没错,就是理解


正妹

PM 提出的需求,经过专业的系统分析师 (应该也是你) 分析以后,接着由软体架构师 (应该也是你) 进行系统设计,然后交给程式设计师 (还是你) 进行设计。这样的开发过程就是现在程式设计的流程,所有的「答案」都是我们可以预测的 (我是说大部分比较正常的情况下),而我们实现「规则」的过程就是程式设计,但有时候规则很难被归纳与实现,说的出来但是很难收敛与系统化,比如从一张照片分辨是猫还是狗。

 

像这一类的问题对人类来说很简单,对机器来说却是很複杂。相较于传统的程式设计,机器学习的过程就不太一样:

 

 

首先我们要準备很多「答案」与「资料」作为训练样本,然后假设这个规则可能构成的方法,接着让机器根据我们提供的答案与资料进行训练,尝试找出两者之间的「规则」关係。这类的问题通常都是很难用传统的「程式设计」来解决的问题,甚至有一些模糊地带与不容易量化的问题答案,就可以透过机器学习 (深度学习) 来完成。

 

除了深度学习,还有浅层学习

 

除了深度学习用到的类神经网路,还有一个领域是机器学习常用的方法,统称浅层学习。这个词比较少见,其实就是一些传统的统计方法,这些其实都是透过「资料与答案」寻找「规则」,当然也属于机器学习的一部分。这些常用的方法如下:

 

机率建模 (Probabilistic modeling)

单纯贝式分类器
逻辑斯回归 (Logistic Regression)

Kernel Methods

SVM – 将资料投影到高维空间,进而寻找最佳决策边界。难以用在大量的资料集,像是影像处理领域。属于浅层工作法,其中「特徵工程」就变得相当重要。

决策树、随机森林、梯度提昇机器

决策树 (Decision tree)
随机森林 (Random Forest):集合大量决策树组合输出值,在 2010 ~ 2014 广授欢迎。
梯度提昇机 (Gradient Boosting Machines, GBM):适合处理非感知资料,透过迭代训练逐步提昇模型的弱点,也称为弱预测模型。

上述的方法大家应该多少有些听闻,我就不一一介绍了 (我也不懂 R~~~)。

 

类神经网路 ANN

 

会被称为 类神经网路 (Artificial Neural Network,ANN),是因为组合的结构与人类脑中的神经元相似,目前在机器学习上使用的神经网路规模的架构,与人类脑中的神经元组成大不相同,无论是複杂度与数量都无法与人脑相比。现在可以透过 HPC 处理比较庞大的类神经网路,用来解决複杂的问题,一个简单的神经网路如下:

Refre: https://mc.ai/a-to-z-about-artificial-neural-networks-ann-theory-n-hands-on/

 

一个类神经网路由许多 Layer 组成,透过 Input 与 Output 给予资料来训练 Layer 中的参数。类神经网路就像一个庞大的「多项式」,需要大量计算才能求得最佳解。如今类神经网路已经发展出非常多样的网路模型,透过不同的神经元连接方式、资料处理方式、参数调整方式、收敛方式来建立 AI 模型,应付各种问题。

 

类神经网路的概念就像一个黑盒子,理论上可以学习任何规则 (是理论!?),在很早期 1975 年 Paul Werbos 发明的反向传播算法 ( Backpropagation ) 就成功训练了「互斥或」逻辑运算,一直到近几年积体电路 GPU 突飞猛进,可以进行複杂与庞大的运算,也让神经网路开启进入到另一个阶段。

 

为什麽现在「深度学习」高速发展?主要以下几个原因:

 

硬体设备提昇:GPU, CUDA 平行运算 (N-Vidia)

 

资料爆炸:伴随网路发展,产生大量的资料、标记内容

 

演算法:更好的启动函数、更好的权重初始化方法、更好的最佳化方式

 

深度学习的基本概念

 

深度学习的基本架构,透过不同的「网路层」连接方式,可以产生不同的 AI Model,解决不同的问题。

 

那幺深度学习是如何运作的?以监督式学习为例,我们需要先準备很多「输入资料 X」与「标準答案 Y」然后送进网路进行运算。藉由不断调整参数来找到「解法」,一开始我们就会定义网路的组成方式,这个网路代表一个假设空间,藉由我们输入的资料让这个假设空间 () 可以找到解法。但如果我们一开始设定的假设空间 () 就已经没有涵盖最正确的解法,那幺无论怎幺运算都不会有好的结果,所以一开始网路的架构选择与组成也是很重要的。整个训练过程如下图:

 

 

上图当「输入资料 X」经过网路的计算后,会获得答案「预测值 Y’」但是一开始这个答案给我们的「标準答案 Y」会有一些差距,基本的训练架构会透过「损失函数」计算出「损失分数」,藉由我们选择的「优化器」逐渐优化调整网路权重值,好让我们的「预测值 Y’」可以慢慢接近「标準答案 Y」。

 

经过数轮的计算后这个「超级函式」就会拟合 (Fit) 我们的输入资料,当未来送入一样概念的资料时,网路就能输出这个概念所理解的答案。

 

这篇文章是我今年 K 书整理下来的心得,后续会慢慢介绍其他 Keras 的用法……. 下次见~

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注