1 什么是机器学习
从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。
与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。这个过程跟人的学习过程有些类似,比如人获取一定的经验,可以对新问题进行预测。
举一个简单的例子:
一个人买西瓜买的多了,就会接受大量的西瓜数据
例如敲西瓜的声音、西瓜外皮颜色、纹路等
从而生成了一个西瓜模型(敲击声音清脆、纹路清晰、颜色鲜绿的瓜会比较甜)
下次遇到一个新的西瓜,这个人就可以通过西瓜模型来判断出这个瓜甜不甜。
大量西瓜数据 + 大脑学习 = 西瓜模型
遇到一个新西瓜 + 西瓜模型 = 判断出新西瓜甜不甜
1.1 常见的机器学习应用
- 电池的充电策略,不是直接充满,按历史充电时间学习充电的节奏
- Siri推荐,例如有时候早上起床时会看到一个“早安”项,Siri会给你推荐早起时习惯打开的应用
- 「照片」应用学习人脸,生成回忆
- 系统级的 垃圾短信识别
- 相册识别物体进行分类
- iOS14新加入的声音识别功能,识别出猫叫、警笛声等
1.2 机器学习与人工智能、深度学习领域的关系
机器学习属于人工智能的一个分支,也是人工智能的和核心。机器学习理论主要是设计和分析一些让计算机可以自动”学习“的算法。
深度学习是机器学习研究中的一个领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,如图象、声音、文本。
2 常见的机器学习分类
根据学习的方式不同,可分为以下三种:
2.1 监督学习
已经有了一部分输入数据和数据数据之间的对应关系,可以生成一个函数,可以通过输入获得输出。
例如根据多年的降雪与来年的丰收情况进行分析,通过某种算法进行训练,然后得到规律也即假设模型。根据输入的降雪情况推断出下一年的收成情况。
监督学习难点是获取具有目标值的样本数据成本较高,成本高的原因在于这些训练集的要依赖人工标注工作。
2.2 无监督学习
无监督学习跟监督学习的区别就是选取的样本数据无需有目标值,我们无需分析这些数据对某些结果的影响,只是分析这些数据内在的规律。
例如沃尔玛根据它每天记录的大量的客户消费数据进行分析,发现了,购买了啤酒的顾客更可能同时购买尿布。所以他们把尿布和啤酒放到一块,结果大幅度的提高了这两者的销售额。
购买尿布和购买啤酒看上去毫无关系,但是通过用户购物数据作为样本发现了其中的关联和规律,对于沃尔玛而言无需知道规律背后的本质,只需要发现这个规律就可以大幅度的提升销售额,这就足够了。
2.3 半监督学习
半监督学习是监督学习和无监督学习相互结合的一种学习方法,通过半监督学习的方法可以实现分类、回归、聚类的结合使用。
3 iOS工程中的运用:CoreML
CoreML 是 Apple 在 WWDC 2017 推出的机器学习框架,支持 iOS,MacOS,tvOS,和 watchOS。借助 Core ML,你可以将已训练好的机器学习模型,集成到自己的应用当中。
在 CoreML 中, Apple 定义了一套自己的模型格式,后缀名为: mlmodel,通过 CoreML 框架,以及模型库,可以在 App 层面进行机器学习的功能研发。
Core ML 将机器学习算法应用于一组训练数据以创建模型。可以使用模型根据新的输入数据进行预测。
版本限制
iOS11+、Xcode10+
3.1 结构组成
CoreML其所处层次如下图:
最底层性能框架层:由Acccelerate and BNNS和 Metal Performance Shaders 两个框架组成。前者用于图形学和数学上的大规模计算,后者用于优化与加速 GPU 和图形渲染。
Core ML:支持导入机器学习的模型,并生成对应高级代码(Swift, Objective-C)的框架。
专用机器学习框架:基于 Core ML,针对特殊场景进行封装和优化的框架。如上图所示,Vision 框架和 NLP 框架都是 iOS 11 添加:前者用于图片分析,例如人脸识别;后者用于自然语义分析,例如上下文理解。 iOS 中的 GamePlayKit 框架也属于 Core ML 对应的专用框架。
应用层:使用了这些框架之后构建起来的 App。
Core ML 针对各种类型模型的设备端性能进行了优化,能够充分利用 Apple 硬件并尽可能地减少内存占用和功耗。
3.2 模型转换
你使用 coremltools Python 包将模型从第三方训练库(如 TensorFlow 和 PyTorch)转换为 Core ML。然后,你可以使用 Core ML 将模型集成到你的应用中。
3.3 训练模型工具CreteML
Create ML 是苹果于2018年 WWDC 推出的生成机器学习模型的工具。它可以接收用户给定的数据,生成 iOS 开发中需要的机器学习模型(Core ML 模型)。
经过3年多的更新迭代,createML的使用更为简单,使得没有对于模型训练相关基础的开发人员也能快速上手,无需编写任何代码即可生成自己的模型并快速集成在工程中。
接下来我将由训练一个动物图像分类模型开始,介绍模型的训练过程和如何将模型运用于工程中。
4 工程运用
4.1 从训练开始
Xcode10以上已经集成了createML工具,只需要打开Xcode,左上角打开Open Develop Tool -> Create ML
打开后创建新模型,可以看到已经内置了许多模型类别,如图像分类、文字识别、手势分类、动作识别等。
选择图像分类并创建项目。
项目打开后可以看到主要有三类数据:训练数据、验证数据、测试数据。
一般来说,只要你的数据足够多,App 会自动从 Training Data 中划分出一部分,作为 Validation Data,所以第二个显示为Automatic。当数据太少时,第二项不可用。
所以一般我们选择第一项 Training Data 的文件夹,和 Testing Data 文件夹,前者是必须的,后者可以不添加,也能训练出模型,只是你无法快速知道训练出的模型在新数据上表现好不好而已。
它的基本工作流程是:从 Training Data 中提取特征,然后在 Validation Data 中检测提取的对不对,对的保留,错的重新提取。
为了简便这里只添加训练数据,这里的训练数据是十个文件夹中的图片,文件名会作为训练后的分类标签,文件夹内是分好类的动物图片。
导入后点击training即可进行训练,这一步根据电脑性能来看,26000+图片我训练了2个小时左右。
训练完成后点击output可以看到模型的相关信息。
从上图可以看到,模型的输入数据为299x299的图片,输出数据一种为string类型的classLabel,一种为classLabelProbs的字典,key为string,value为double类型。分别表示了识别概率最高的类型名字和各种识别类型的名称和其概率。
点击导出按钮即可保存模型,其后缀为.mlmodel
至此,已完成了模型的生成,下面将进行iOS工程中的模型使用。
4.2 模型使用
尽管机器识别其底层实现逻辑复杂,但对于训练好的模型在工程上的运用却是相当简单。
对于Xcode而言,已有的模型就相当于是一个库文件。只需要将.mlmodel文件拖入工程栏,Xcode将自动为你生成模型API,只需要满足其输入数据要求即可获得你想要的结果。
如图所示,导入工程后点击红框中的类即可调转到其生成的API头文件中。值得一提的是,若你的工程是swift语言,其生成的也是.swift文件,OC则生成.h头文件,相当方便。
下图即为OC工程自动生成的头文件。
主要包含三种对象,Input、Output以及同名对象,其使用也与其他对象使用方式相同,初始化、设置参数、调用方法...
现在我们根据图像分类模型编写一个小的demo来进行使用,利用UIImagePickerController来获取相册图片并进行图像识别。
在imagePicker的回调中,我们根据获取到的图片进行格式转换,转换为其需要的输入类型并传递给input对象,调用predictionFromFeatrues方法来获取output对象,并从中获取结果。
其中格式转换的部分代码如下:
转换的格式类型在自动生成的头文件中也有描述:
该模型输入为kCVPixelFormatType_32BGRA即32位BGRA的CVPixelBuffer格式类型,大小为299x299像素。
run一下看下效果:
4.3 已训练完毕的模型网址
github上也有一些模型可供选择。
5 其他平台的模型工具介绍
-
Tensor Flow
Tensor Flow是一个开源软件库,主要用于使用数据流图的数值计算。Google开发了Tensor Flow,以帮助将机器学习建立到自己的系统中,并辅助神经网络研究。研究人员发现,该系统可以适用于各种其他领域。Tensor Flow是一种高度可扩展的机器学习系统,适用于各种系统。 -
Torch
Torch是一种广泛使用的开源机器学习开发框架。它允许基于神经网络的算法在GPU硬件上运行,而不需要在硬件级别进行编码。Torch易于使用,而且高效,因简单、快速的脚本语言而受到青睐。Torch的目标是在构建科学算法时具有最大的灵活性和速度,而不会使过程变得困难,这个广泛的平台鼓励使用它的企业对应用进行创新。 -
H20
H20,也称为H20.ai,正在为全球最具影响力的一些公司开发关键任务数据产品。H20是世界上使用最广泛的开源深度学习平台。它被全球超过8万名数据科学家和研究人员以及超过9000家企业和组织所利用。H20提供基于Web的用户界面,同时可访问机器学习软件库,并开启机器学习。 -
MLib
MLib是Apache Spark的机器学习库,它包含常见的学习算法和实用程序,包括分类,回归,聚类,协同过滤,维数降低等。MLlib易于部署和运行在现有的数据集群上。 -
Caffe
Caffe支持广泛的代码使用。1000多名开发人员推动其发展,为机器学习做贡献。Caffe帮助学术研究项自,启动原型,以及视觉,语音和多媒体等大型工业应用。