网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
机器学习的潜力非常深远,很难想象哪一个部门不被影响。对于用户而言,不管是在家中、工作中还是休闲娱乐中,机器学习带来了新的认知和便利。对于制造商而言,它使流程更加高效并产生了新的业务模型和服务。
1.1 掌握ML的基本概念
术语-人工智能(AI)和机器学习(ML)经常可以互换使用。但是,在数据科学领域,这两个术语是不同的。本书对其定义如下:
- AI-是使机器能够模拟人类智能的硬件和软件的总称。要想实现这个智能,设计一些列技术,包括ML、机器视觉、和自然语言处理。
- ML是AI的子集。ML使用统计学的技术是程序通过训练而学习,而不是通过规则进行编程。
ML系统处理训练数据已逐步提高性能,提供伴随经验而提高的结果。数据来源于网络边缘-可以时IoT设备、边缘服务器或边缘设备-发送到cloud端进行训练。
机器学习是人工智能的一个子集,对于几个关键概念,有如下关系:
算法 < 深度学习 < 机器学习 < 人工智能
一旦机器学习系统被训练完成,它就能分析新的数据并在训练数据的上下文中对其进行分类,这被成为推理。
机器学习执行的2个地方:
- Cloud
机器学习通常在远端、功耗和计算密集的服务器端进行。
- Edge
ML推理通常在本地进行,将在提供输出的设备上进行。术语-edge
,可能是指IoT设备,边缘服务器或边缘设备。
1.2 差异化和降低成本
尽管机器学习的第一波浪潮专注于云计算,将为简化模型而使其能够运行在低功耗硬件上的改进技术和在边缘设备上提高的计算能力结合起来,使差异化和降低单位成本成为可能:
- 减少延迟;提高可靠性和安全性
对于用户而言,无法响应的APP或无法加载页面的延迟都是一件烦人的事,但是,许多对时间要求苛刻的应用-比如自动驾驶系统-不能简单地依赖于云系统,因为响应延迟可能会产生严重的安全隐患并严重影响车辆性能。
- 功耗
将数据从设备传输到云端服务器增加了机器学习系统的电力成本,因为在系统中迁移数据毕竟会消耗电力。基于云端或网络执行的机器学习也会增加带宽负担,这可能很重要。因为机器学习往往需要大量的数据。通过尽可能多地在设备上执行机器学习,网络上和云基础设备的功耗和复杂性就会降低。
- 隐私和安全
消费者和公司越来越重视数据的安全性。没有人希望自己的隐私遭到破坏,但是不断地在云和设备间迁移数据,这种风险正在增加。当在设备上进行处理时,有关数据存储和传输的法律问题以及隐私法规(例如,欧盟最近的通用数据保护法规(GDPR))的合规性将被降到最低。
- 个性化
除了隐私和安全性,在设备上执行机器学习还将导致更多的个性化的计算经验。随着更多设备变得智能,它们将需要适应自身的即时环境,并根据周围环境的场景作出即时响应。当这些设备将用户和他们关心的事物连接起来时,人工智能就成为可能,且因人而异。在云端为每个用户提供唯一的维护、定制化的模型是一项巨大的持续开销,因此,可以运行自己定制化模型的边缘设备将提供竞争优势。
最后,边缘设备上的机器学习将实现一个更可靠、更快响应和更安全的用户体验,还能降低单位成本、个人数据风险和功耗,并且也无需网络连接。
1.3 探索机器学习的机会
机器学习与新设备无关,而是可以利用所有的设备。机器学习使设备能够更好地利用视觉、声音、热量和振动,从而关联其及时环境。这项革新将会创造新的商业模型、降低成本并优化一些列参数的性能。
尽管机器学习的好处令人兴奋,但是往产品中添加机器学习的第一步就往往令人生畏。机器学习的要求因模型和工作负荷差异很大;没有一劳永逸的方案。几乎所有的模型都允许精度和性能自由可调。这种灵活性允许在设备硬件和模型能力之间寻求一个平衡点,但是,这却带来了额外的问题:
- 使用场景是什么?
- 哪种神经网络(NN)模型提供了最佳的性能/精度平衡?
- 应该选择哪种硬件补偿算法? 性能很低的硬件可以和精度较低的模型一起使用吗? 可以根据RAM调整模型吗?
- 选择哪些工具可以解决这些问题?
- 更重要的是:如何平衡这些问题,以最佳的单位成本提供最佳的性能?
2 配置ML环境
本章重点:
- 理解ML平台的组件
- 选择ML开发环境
- 案例研究
选择一个合适的解决方案需要做许多平衡:从小的、低功耗的微控制器单元(MPU)-对成本和功耗有限制的系统,到中央处理器(CPU)-更高性能和通用目的,再到图形处理器(GPU)-提高图像处理应用的性能,还有专用的神经网络处理器(NPU)-更高密集和更高效的机器学习处理。本章将梳理这些内容。
2.1 理解ML平台的组件
选择什么样的平台运行机器学习?令人惊讶的是,就硬件而言,它可能需要的就是你身边现有的东西。许多平台已经能够单独在CPU和GPU上运行ML应用了。(在第5章将会看到这样的示例)
对于某些应用,更高的性能要求可能需要专用ML处理器,比如,神经处理单元(NPU)。但是,如果每个处理器上运行的软件栈不同,而将NPU和CPU及GPU混合在一起运行ML,无疑将会增加复杂性。这个问题催生了一个软件层,负责对软件应用程序隐藏底层硬件的复杂性。
异构计算是指使用不止一种处理器或硬核以实现更好的性能和更高的效率的系统
异构计算平台允许应用开发人员可以选择自己喜欢的NN框架去写应用,比如’Google’的’TensorFlow’、‘Facebook’的’Caffe’和’Caffe2’,而不必关心来自不同供应商的处理器类型。如图2-1所示,软件层负责隐藏硬件并适配不同的应用程序。
图 2-1: 一个异构计算平台的示例,含有多个硬核,以及开源代码
开源标准有助于降低复杂性,保证不同供应商方案的兼容性。这方面,一个显著的例子就是开源神经网络交换格式(ONNX),目前由ARM、Microsoft、Facebook、Amazon和其他的一些公司支持,提供了训练框架和运行时引擎的通用格式。
你有许多运行ML模型的选择:
- 长时间运行的低功耗微处理器CPU:
小型模型可以在这些低功耗芯片上运行,降低成本。比如,检测唤醒系统其它部分的动作和行为,以便实施更详细的分析。
有时候,微处理器带有DSP,数字信号处理器,它可以加快处理,而不需专用的DSP即可为ML提供干净的信号。这可以节省成本、面积和开发时间,尤其是在没有DSP软件开发背景的前提下。
- 高效、通用CPU:
依赖内核的配置和数量,可以很好地运行完整的ML。例如:用于隐藏字幕生成的实时语音识别。
- 多媒体和CPU内核:
通常运行和移动设备内核运行相同的模型,从而提高性能和效率。如果设计中已经考虑使用GPU,则可以把CPU用于其它任务,以最大化效率。
- 专用NPU:
专用芯片以较低的功耗提供了运行通用ML模型的最高性能。比如,确定实时高清视频源中的那些像素对应一个人。
要想准确地知道你的设备中需要哪些组件,需要多方面的仔细考虑,是我们接下来要讨论的内容。
2.2 选择ML开发环境
选择合适的硬件,是否需要专用NPU,以及怎样把它集成到系统和工具中,这些都因情况而定。但是,对于受限的环境,以下几个功能必须在架构设计中考虑进去:
- 数据处理:
你的边缘解决方案需要哪种数据提取和处理?这可能依赖于你要运行的模型类型和同时运行的模型数量。这些模型有多复杂?它们是否有计算能力和带宽限制?
2. 连接:
设备上可以做什么?什么需要连接到云端?什么必须要留在云端?
3. 集成:
是否有集成或者依赖管理?开发者社区将使用哪些框架?不同框架开发的模型,系统如何支持?
4. 功率、尺寸和热量等:
你的边缘设备是否有功率、尺寸和热量等方面的限制?
5. 精确度:
想要的精度是多少?尽管你首先会想,精度越高越好,但并不总是这样。到一定水平后,就会达到一个收益递减点。在某些场景下,提高2个百分点的精度可能需要在计算能力和内存方面要求10倍的增加。所以,应该非常清晰地知道特定情况下的精度水平。
6. 隐私和安全:
你的边缘解决方案对隐私和安全有哪些考虑?
7. 工作负载:
NPU是否大部分空闲,用其它也空闲的CPU或GPU是否可以完成?另一方面,虽然CPU或GPU能够运行模型,但是如果这些资源的负载已经很重,使用NPU是否是一个更好的方案?
综上考虑,所需的组件是不同的。一个CPU或GPU是否已经足够?是否需要添加一个NPU?在成本限制内,满足需求的NPU的大小?综合市场上已有的不同处理核的能力,匹配你的需求。
下面的案例研究,提供了一个可以在边缘嵌入式设备上运行的实例。
2.3 案例研究:用于哮喘病人的边缘机器学习的实例
例如, Amiko Respiro提供了更智能的呼吸技术,帮助哮喘病人更轻松的呼吸。该方案包含基于ML的传感器,作为标准呼吸器的附件,以提高哮喘病的治疗。这些智能传感器必须是低功耗的,可扩展的,能够有效地控制成本,并且可以和一个基于可连接的平台上的面向病人的APP配合使用。
Respiro
传感器模块的核心是一个超低功耗的ARM Cortex-M处理器,能够:
- 在设备上实现数据处理,无需连接到云端
- 使用低功耗蓝牙(BTLE)连接到智能手机
- 效率曲线可延长设备电池寿命
该解决方案使用机器学习解释呼吸器的振动数据。传感器被训练,识别病人的呼吸形态和吸入时间,计算出重要的参数,诸如肺活量和呼吸技术。
处理器允许Respiro
运行实时ML算法,以识别行为模式并解释传感器模块本身内的数据。用户无需等待后台处理详细的传感器数据。当用户按下触发键,传感器模块立即识别用户的呼吸方式数据并提供低延时的、用户私有的数据反馈。
Respiro
传感器和病人安装在手机上的APP绑定在一起。传感器收集呼吸器的使用数据,而不会中断药物输送方式,并发送数据和反馈给APP。该传感器模块也很方便的添加新功能,扩展更进一步的创新互联医疗解决方案。
3 为什么软件真正重要?
本章重点:
- 利用现成的硬件、工具和模拟器缩短上市时间
- 通过软件实现差异化
- 训练和部署ML模型
根据著名的技术专家Mark Andressen
的名言,“Software is eating the world.”。稍有不慎,软件就会占用大量的开发预算,并推迟产品的开发计划。但是,软件创新和ML功能也日益成为设备供应商差异化的关键因素,如果你想再产品中加入ML功能,就必须对你的具体软件需求有一个深刻的理解。
3.1 利用现成的硬件、工具和模拟器缩短上市时间
降低软件和ML模型开发风险的最快方法就是,使用与最终产品功能尽可能接近的硬件进行原型设计。这可以通过使用行业标准的CPU和CPU实现,或者对之前的产品进行迭代实现。
为了满足你的需求,建议选择大型供应商提供的组件-最好是具有丰富的原型设计平台的生态系统。这意味着你可以在重要的领域,比如性能、功率或者硬件的连接性上,选择与你的最终设计比较接近的技术。
一旦原型平台定下来,下一步就是搭建有效的开发环境。根据你的设备,这可能包括:
- 操作系统
- 编译器
- 高性能库
- 调试和性能分析工具
- ML框架
因为开发团队需要时间来建立这些工具和库的专业知识。那么在已经熟悉的平台上构建,可以提高生产效率和创新能力,从而大大减低软件开发的风险。
理想情况下,团队开发的工具和软件应可移植到最终的平台上。当早期的硬件为测试并降低紧要关头的延时和性能意外而做好准备的时候,通用的标准和架构可以使集成变得更为顺利。
如果选择的架构提供模拟器和快速建模工具,开发风险就会进一步降低。当今的快速模型和模拟器完全有能力在硬件准备好之前,在模拟器上运行完整操作系统并运行最终的应用程序。使用可重复的模拟器,提供了更进一步的容错和性能预测。模拟器上有效运行的项目通常都能成功地部署到真正的硬件上。
简而言之,为了有效降低软件开发的风险,请选择一个架构和现成的原型平台:
- 最终产品所需的功能相近
- 团队熟悉的一组通用工具、库和框架
- 提供强大的仿真解决方案,可最大程度减少集成软件和硬件的时间
3.2 通过软件实现差异化
选择了硬件体系架构,也就等于选择了软件栈和生态系统。大的生态系统具有专业的团队,能够持续地优化和改进它们的软件栈。例如,ARM
提供了Arm NN
,计算库,和CMSIS-NN
。如图3-1所示,在4个月的时间里,在Cortex-A系列CPU
和Mali GPU
上的AlexNet
,Inception
,SqueezeNet
和VGG-16
提高了1.6倍~2.6倍,
在开发和维护都很活跃的软件栈基础上开发,可确保在未来的性能和安全改进中受益,无需自己再开发维护。
图3-1 软件性能提升
所有设计都有针对硬件的软件平衡选择。通常,软件解决方案可以使团队在发布之前持续创新软件功能,优化机器学习的模型架构和性能训练,直到最合适。
在某些情况下,生态系统和ML研究团队提高的性能,使你之后的产品版本具有显著的差异化性能和功能,而无需大的硬件变动-只要这些功能与原始设计的硬件紧密相关就可以。
选择硬件方案的时候,请密切注意一下方面的软件性能:
- 优化的软件协议栈:
这是实现硬件性能最大化的关键指标。
- 生态软件:
必须能够提供持续的性能和安全更新。
- 自己的解决方案:
考虑哪一部分硬件实现,哪一部分软件实现更为灵活方便。
3.3 训练和部署ML模型
神经网络的优点是其灵活性,其缺点也是灵活性。可以通过权衡精确度,性能,内存要求和硬件兼容性,适应你想要的性能参数-但是为了最佳部署,而寻求某种平衡和训练神经网络并不是一件容易的事。正如软件部署一样,同样需要花费精力在这些工具的使用上。为了最小化风险,请寻找基于或者兼容TensorFlow
和ONNX
的开源代码的方案。
随着模型训练和优化技术的提高,曾经局限于数据中心的人工智能(例如语音和图像识别,推荐和预测),应用在手机和嵌入式设备上的情况越来越多了。当然了高性能的NPU除外。
当今世界,最流行的AI平台无疑是智能手机,其中包括的ML功能有,文本预测,语音识别和计算摄影。但是,随着人们越来越了解嵌入式ML开发的好处,这些功能正在扩展,并在越来越多的嵌入式设备上可用。比如,有效的语音关键词搜索(例如,听一个唤醒词或简单的命令),已经在微控制器上得到了充分证明。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
转存中…(img-xIV4Ju7G-1715387813951)]
[外链图片转存中…(img-Mb9sCwmu-1715387813951)]
[外链图片转存中…(img-lGxdHvsI-1715387813952)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新