介绍
我一直对语音识别比较感兴趣。所以,这次,我决定开个帖子记录从最开始了解的全过程。
截止2024-05-10,我还在学习机器学习相关的准备知识,还没有开始真正的语音识别的领域,但是我非常享受这个过程。
更新记录
-
2024-04-13
- 开帖子
-
2024-04-14
- 看到一篇文章,关于alexa 的营收情况和这种智能音箱的应收情况
-
2024-04-15
- 畅想了一下未来语音助手的前景
- 介绍了一下声网
-
2024-04-16
- 增加 我到底想要什么样的语音助手
- 增加 市场上的相关岗位
-
2024-04-19
- 增加了对西瓜书和机器学习实战第二版的介绍
- 增加了一些机器学习理论知识的补充
- 坚信声音智能技术是未来的一个方向
-
2024-04-29
- 最近跳跃阅读了《机器学习实战》很多章节,感觉帮助非常大,这本书比西瓜书更适合入门,简直是太好了。
- 阅读scikit的代码,感受机器学习
-
2024-05-10
- 新增关于机器学习实战第三章分类算法的实践
- 新增算法工程师的职业方向规划
第一章-发现
初见
小米声音识别算法模型在业界率先突破 50mAP
昨日,小米公司宣布,小米自研声音识别算法取得最新进展。据了解,在 Google 发布的 AudioSet 音频标记任务中,小米的声音识别算法模型首次在业界突破了 50 mAP,刷新了音频标记技术指标,成为截至目前性能最好的模型。
科普
什么是语音识别模型
我问了chatglm, 它告诉我如下:
声音识别算法模型通常指的是自动识别和理解语音的技术。这种技术使得机器能够接收并解释人类语音,进而执行相应的指令或者转换为文本信息。声音识别模型通常包括以下几种类型:
- 隐马尔可夫模型(HMM) :这是一种基于统计的模型,用于处理序列数据。在语音识别中,HMM可以用来建模语音信号的时间结构。
- 支持向量机(SVM) :SVM是一种强大的分类算法,可以用于语音识别中的特征分类。
- 人工神经网络(ANN) :ANN能够模拟人脑处理信息的方式,通过多层神经元来学习和识别复杂的模式。深度神经网络(DNN)是ANN的一种,它在语音识别中表现出色。
- 循环神经网络(RNN) :RNN特别适合处理序列数据,因为它们能够在网络中保持一个“隐藏状态”,允许前面的输入影响后面的输出。长短期记忆网络(LSTM)和门控循环单元(GRU)是RNN的变体,在语音识别中广泛应用。
- 卷积神经网络(CNN) :CNN在图像识别领域取得了巨大成功,也可以用于语音识别,尤其是在提取音频信号的声学特征方面。
- Transformer和Self-Attention模型:Transformer模型,尤其是其中的自注意力机制,已经成为语音识别领域的重要技术。模型如BERT和其变体在语音识别中也非常流行。
- 端到端模型:这类模型直接将语音信号映射到文本,不需要单独的特征提取和模型训练步骤。例如,使用CTC(Connectionist Temporal Classification)损失函数的神经网络可以直接输出识别结果。 在实际应用中,这些模型可能会结合使用,以达到更高的识别准确率和效率。随着深度学习技术的发展,声音识别算法模型也在不断进步,使得语音交互成为智能系统的重要组成部分。
看来,要学不少算法的东西!
关于mAP是什么
在语音识别算法模型中,mAP(Mean Average Precision)是一个常用的性能衡量标准,尤其是在关键词检出(keyword spotting)任务中。mAP是从信息检索领域借用过来的一个指标,它衡量的是模型在一系列查询中的平均精度。 mAP的计算方式如下:
- 对于每个关键词,计算其平均精度(AP)。
- AP是通过对检索结果按照置信度排序后,计算每个检索点的精度,并求这些精度的平均值。
- mAP是所有关键词的AP的平均值。 这里的“精度”是指检索到的相关结果占所有检索结果的比例。在语音识别中,通常是指模型正确识别的关键词占所有识别尝试的比例。 mAP的范围是从0到1,其中1表示完美的性能,即模型在所有查询中都能以完美的精度检索到所有相关结果。mAP越高,表示模型的性能越好。 在语音识别中,mAP用于评估关键词检出系统在多个关键词上的总体性能,而不是单个关键词的性能。这是一个非常有用的指标,因为它考虑了模型在多个任务上的泛化能力。
接下来,我一直好奇什么是SVM,我在算法课程中听过支持向量机,但是非常模糊,所以我需要再重新学习一下。
什么是SVM
支持向量机(Support Vector Machine,简称SVM)是一种监督学习算法,用于分类和回归分析。SVM在机器学习中非常流行,特别是在分类问题中,因为它能够有效地处理高维空间的数据,并且在实际应用中通常能够提供非常好的性能。
基本概念:
- 超平面:在二维空间中,超平面是一条直线;在三维空间中,它是一个平面。在更高维的空间中,超平面是一个分割数据点的边界。
- 支持向量:在训练数据中,离超平面最近的那些数据点被称为支持向量。这些点是确定超平面位置的关键,因为超平面的位置是由支持向量决定的。
工作原理:
SVM的目标是找到一个最优的超平面,使得不同类别的数据点能够被最好地分开,同时最大化分类间隔(即支持向量到超平面的距离)。这种方法也被称为最大间隔分类器。
核技巧:
SVM使用核函数来处理非线性问题。核技巧允许算法在原始特征空间中不可分的数据通过映射到高维特征空间中变得可分。
SVM的类型:
- 硬间隔SVM:当数据是线性可分的时候使用。
- 软间隔SVM:当数据不是完全线性可分的时候使用,允许一些数据点违反间隔约束。
- 非线性SVM:使用核函数将数据映射到高维空间,以便可以找到一个超平面来分隔数据。
应用:
SVM被广泛应用于文本和图像分类、生物信息学、手写识别等领域。
优点:
- 效果好,特别是在特征维度较高时。
- 使用核技巧可以很好地处理非线性问题。
- 泛化能力较强,不容易过拟合。
缺点:
- 训练时间较长,特别是对于大规模数据集。
- 当特征数量远大于样本数量时,效果可能不佳。
- 需要仔细选择核函数和正则化参数。 SVM是一个强大的机器学习工具,理解其原理和能够熟练应用它对于数据科学家和机器学习工程师来说是非常有价值的。
SVM怎么学习
学习支持向量机(SVM)可以分为理论学习和实践应用两个部分。以下是一些建议帮助你学习SVM:
理论学习:
-
基础数学知识:在学习SVM之前,你需要有一定的数学基础,特别是线性代数、概率论和微积分。
-
了解机器学习基础:熟悉基本的机器学习概念,如监督学习、无监督学习、过拟合、模型评估等。
-
学习SVM的理论:
- 理解SVM的基本思想,即找到能够最大化分类边界的超平面。
- 学习支持向量和间隔(margin)的概念。
- 了解硬间隔和软间隔SVM,以及如何通过正则化处理非线性问题。
- 学习核技巧(kernel trick),如何通过映射到高维空间来解决非线性问题。
-
阅读经典教材和论文:
- 《统计学习方法》- 李航
- 《模式识别与机器学习》- Christopher Bishop
- 《支持向量机》- Vladimir N. Vapnik(SVM的创始人之一)
-
在线课程和教程:参加在线课程,如Coursera、edX、Udacity上的机器学习课程,这些课程通常会有关于SVM的专门讲解。
实践应用:
-
使用Python或R等编程语言:这些语言有丰富的机器学习库,如scikit-learn,可以让你轻松实现SVM。
-
实践项目:
- 使用SVM处理简单的分类问题,如手写数字识别。
- 尝试不同的核函数,观察对模型性能的影响。
- 在真实数据集上应用SVM,如文本分类、图像识别等。
-
调参:学习如何通过交叉验证、网格搜索等技术来优化SVM模型的参数。
-
阅读源代码和文档:阅读scikit-learn等库中SVM的实现代码,加深对算法的理解。
-
参加竞赛和论坛:在Kaggle等数据科学竞赛平台上参加比赛,或加入机器学习社区和论坛,与其他学习者交流经验。
综合资源:
- 书籍:《机器学习实战》
- 在线课程:Coursera上的《机器学习》课程(吴恩达教授)
- 教程和博客:网上有大量的免费教程和博客文章,可以提供不同角度的解释和实例。
- 视频讲座:YouTube和其他视频平台上有很多关于SVM的讲座和教程。 通过结合理论学习、实践操作和不断的项目练习,你可以逐步深入理解SVM的原理和应用。记住,学习是一个迭代的过程,不断实践和回顾理论知识是提高的关键。
我想接下来给自己定个任务,就是快速的用SVM做个东西。我暂时打算先体验一下它的效果,然后再进行理论学习。
我想我需要去找三蓝一棕的视频,看看SVM的介绍,希望他有这系列视频。但是目前这个不是最重要的。
我其实现在真的很想体验一下SVM的效果。
预期说怎么学习SVM,不如说怎么学习算法。其方法都是通用的。
sigmoid函数
Sigmoid函数是一种数学函数,通常用于统计学和机器学习中,特别是在神经网络和逻辑回归模型中。它的数学表达式为:[ S(x) = \frac{1}{1 + e^{-x}} ]
Sigmoid函数的图形类似于一个“S”形,它的输出值范围在0到1之间。当输入值 ( x ) 接近正无穷时,Sigmoid函数的输出接近1;当输入值 ( x ) 接近负无穷时,输出接近0。这种特性使得Sigmoid函数非常适合用作二分类问题的激活函数,因为它可以输出一个概率值,表示输入样本属于正类的概率。 Sigmoid函数的一些重要特性包括:
- 可导性:Sigmoid函数是可导的,这意味着可以计算其导数。这在机器学习中的反向传播算法中非常重要,因为需要计算函数的导数来优化模型参数。
- 单调性:Sigmoid函数是单调递增的,这意味着随着输入值的增加,输出值也会增加。
- 饱和性:当输入值远离0时,Sigmoid函数的导数接近0,这称为饱和。在饱和区域,Sigmoid函数的梯度很小,这可能导致在训练神经网络时出现梯度消失问题。 尽管Sigmoid函数在历史上被广泛使用,但在深度学习中,它已经逐渐被其他激活函数如ReLU(Rectified Linear Unit)取代,因为ReLU在处理梯度消失问题方面表现更好,并且计算效率更高。不过,Sigmoid函数仍然在某些特定场景和模型中被使用,特别是在需要输出概率值的模型中。
语音转文字产品
平时使用声音转文字的时候,我用过的产品有讯飞语音识别,可以支持小时级别的语音转文字,各种输入法,以及微信语音转文字。
怎么能做一个类似的东西呢?我自己也想拥有一个这样的东西。
而且,我之前看很多视频,音色替换,这个也非常的有意思。
我现在需要一个产品,接受一段声音文件,然后把其中的文字输出出来,应该非常简单的界面。
之前有听说过 whisper也很牛!但是,一直都没用过。
那么我就自己做一个单机版的吧!
意义所在
在参考1.2中提到,意义还是甚多的。
无论是语音助手和聊天机器人,还是支持客户自助服务的问答系统,语音识别和对话式 AI 的应用频率与日俱增。涵盖金融和医疗健康等众多领域的各行各业,在其解决方案中采用 ASR 或对话式 AI。语音转文本的实际应用非常广泛:
- 外科医生或飞机驾驶员等“忙碌的”专业人士可以在工作期间进行记录并发出命令。
- 如果不能使用键盘,或者在开车时遇到危险,用户可以发出语音需求或口述消息。
- 声控电话应答系统可以处理复杂的请求,而无需用户导航菜单。
- 无法使用其他输入方式的残障人士可以使用语音,与计算机和其他自动化系统进行交互。
- 自动转录的速度比人工转录的速度更快,并且成本更低。
- 在大多数情况下,语音识别速度比打字速度更快。普通人每分钟大概可以说 150 个单字,但只能打 40 个字左右。使用密小难辨的智能手机键盘打字,性能甚至会更慢。
- 现在,语音转文本在智能手机和台式电脑中的应用随处可见。特殊用途还可用于医学、法律和教育学科。随着其广泛应用成为主流,并且在家庭、汽车和办公室设备中广泛部署,学术界和业界已加大对此领域的研究力度。
别的不多说,我每天的个人语音操作手机的需求就很旺盛,但是现实并不能满足我的期望。我想开车用,我想写日记用,我想用语音操作手机,现在的都做的不够好,尤其是车载设备。
补充一下, 现在的客服声音也需要更好的拟人和智能。总之,语音操作是很重要的!
小米语音算法zipformer
小米新一代Kaldi团队论文解读:模型Zipformer诞生之路
相关工作
在参考1.2中,英伟达的这篇文章里提到,ASR 是对话式 AI 应用程序流水线的第一阶段,使用自然语言与机器进行交流。典型的对话式 AI 应用程序使用三个子系统来处理和转录音频,即理解提出的问题(获取含义)、生成回复(文本),然后将回复反馈给人类。通过多个深度学习解决方案协同工作来实现这些步骤。首先,ASR 用于处理原始音频信号,并从中转录文本。其次,自然语言处理 (NLP) 用于从转录文本(ASR 输出)中提取含义。最后,语音合成或文字转语音 (TTS) 用于从文本中人工生成人类语音。各步骤均需构建和使用一个或多个深度学习模型,因此优化此多步骤流程非常复杂。也就是三个步骤, ASR,NLP,TTS。
参考1.3 TODO
参考
1.1 小米声音识别算法模型在业界率先突破 50mAP juejin.cn/post/727829…
1.2 什么是语音转文本? | 数据科学 | NVIDIA 术语表
1.3 语音识别与AI大模型:如何实现高精度语音转文字 - 掘金 (juejin.cn)
第二章 alexa等语音助手
语音助手怎么盈利?比如Siri,小爱同学(小米公司的产品),天猫精灵(阿里旗下)。
这个工具现在无法直接赚钱,一般来说,能赚钱的就是打广告,靠流量挣钱。用户多了,随便插入点广告,但是人工智能产品不行,这个东西如果插入了太多的广告,就会破坏信任度,所以必须开启一种新的盈利模式。在我看来,就是针对功能本身收费(捆绑销售,功能增强)。它可以提供统计功能,比如你问了助手哪些问题,它都记录着。它提供更加精准度操作,它能和软件操作结合起来。
盈利模式的尝试
刚刚我们只提了一个简单的设想,目前估计也只能暂时停留在设想层面,因为没法检验。
如果语音助手,能够更加精准的操作设备,能持续和人对话,那就好了。
参考2.1中提到,Alexa每周收到10亿次交互,但其中大多数对话都是播放音乐或询问天气之类的简单命令。”这些简单对话是无法盈利的。没有多少人愿意信任一个AI产品,不看图片或阅读评论就花钱或购买商品。
亚马逊还试图围绕Alexa技术与一些公司开展合作,让用户通过一个语音指令就可以购买达美乐的披萨或叫辆优步,而在这个过程中,亚马逊可以获取佣金。报道称:“由于使用不多,到2020年,该团队已停止发布销售目标。”
根据BusinessInsider的追踪调查,Alexa目前(2022年12月1日)在美国语音助手大战中排名第三,谷歌的Assistant有8150万用户,苹果的Siri有7760万用户,Alexa有7160万用户。
另外,各种应用平台、API等已经能让语音助手遍历网络上的大量信息,再把指令跟应用程序功能对接起来。
这一切听起来都很美,但如今的语音助手仍有着明确的功能边界。在大多数情况下,亚马逊Alexa只能完成简单的任务,例如设置闹钟、播放音乐、播报天气和在网上搜索简单信息等。这些功能要么指向性很强,根本就没多少犯错的空间,要么就是敏感性很低,哪怕做错了也没多大影响。但如果我们想要执行某些敏感、需要多次交互或者具有多模实质的任务,语音助手的可靠性就会急剧下降。
声音的本质就是在手不方便的时候,代替手来操作,程序必须提供语音接口。可以从程序级别提供语音接口,而非一定要先从操作系统层面提供。
人们目前关于智能音箱的盈利办法的共识,是如下:
第一,就是销售硬件,例如亚马逊Echo、苹果HomePod或者谷歌Nest之类的智能音箱。在这种情况下,语音助手技术的商业价值就直接取决于设备价格、所能售出的设备数量以及客户更换这类设备的频率。换言之,这种商业模式跟智能手机很像,人们每隔几年就会掏几大千去买下一代iPhone或者Pixel手机。手机的使用频率高的多,音箱则不然。但那可是手机,智能音箱缺少催人升级换代的动力(只有特殊场景才需要这种功能,比如双手忙不开的时候,所以注定了它难以快速成为大众消费品)。
第一,人们不想为这些音箱支付很高的溢价,毕竟本身使用频率就不高;第二,智能音箱的升级空间也不大,一个麦克风、一个喇叭、再加个显示屏,也就差不多了;最后,用于支持语音助手的云服务也有升级和维护成本。所以综合来讲,用户对智能音箱的使用会给厂商带来持续存在的成本,并在日积月累后逐步超过当初销售音箱所创造的利润。这里来说,智能音箱就是主打一个声音,发挥空间很小。所以,它聊天的功能必须非常强大,它的发挥空间太小了。
第二种思路就是出售服务。在这种情况下,用户需要按月或按年付费才能使用手机或智能音箱上的语音助手。但让人单独付费真的很难,产品必须具有明确的价值才能说服用户为此买单。为了让这种商业模式取得成功,产品必须能够解决某些业界尚未解决的难题,或者创造足够直观的附加价值,进而与产品/市场相契合。遗憾的是,亚马逊Alexa和其他语音助手都达不到这样的高度,单独收费更是痴心妄想。
最后,有些朋友可能还指望着将亚马逊Alexa当成吸引用户购买其他产品的渠道,比如前面提到的网购操作界面。但语音助手天然就不适合这类操作,所以Alexa没法提供理想的购物体验。用户显然更愿意在手机或电脑上操作购物软件,那样更直观也更顺畅。
如今Alexa和Siri之所以还存在,就是因为其背后是两家财力极为雄厚的企业。双方可以不断砸钱进去,在承受亏损的同时慢慢摸索商业模式和技术可能性。
语音助手与NLP
如果纯粹把声音变成文字,然后转换成文字聊天,那么就丢失了语音中包含的情感信息。
所以,NLP不能仅仅是文字级别的,还要有声音级别的,即能合成带有语义和情绪声音。
这样想想,挺让人绝望的,因为我目前连NLP都还没有入门。
语音助手方向的畅想
下一代语音助手又将朝哪个方向前进?也许有以下几种可能。
首先,等待AI技术的发展让语音助手愈发强大,从而为更多应用场景提供支持(例如主动式语音助手,由它在必要时主动询问意见,而非靠指令被动激活)。
另一种方案就是将现有通用型语音助手转化为面向特定场景的专业助手。如此一来,我们就能把语音助手集成到应用场景的上下文和工作流中,让它们有能力处理步骤更多、复杂度更高的任务。这种形式有望建立起B2B商业模式,特别是在那些需要大量手动操作的行业(例如制造业、饭店和酒店等)中,可以尝试用语音助手降本增效。正如第二代谷歌眼镜在手工领域获得了不错的市场认可,这类业务场景的附加价值也将远超普通消费级市场。
目前还很难确定未来的智能音箱到底还需不需要显示屏。毕竟我们的大部分日常事务都涉及视觉元素,而纯语音助手在应用上还有很多局限。技术发展应该会给出答案。
语音助手技术和市场的畅想
1 实现语音操控APP内部,关于发展路线,先从可实现的程序级语音接口开始。类似于高德的小德。
2 语音识别模型必须成为一个组件,可以嵌入进来。
3 如果是实时翻译的话,也是不错的。
4 未来的语音助手,程序级的语音模块和用户级的语音模块,就相当于内核态和用户态的区别一样。
5 语音助手一定要支持离线的功能,否则个人隐私堪忧!
6 回家或者离开家的时候,语音助手检测到这个事件即将发生,会跟你打招呼。
广义的来说,语音算法模型说到底是,围绕着声音做文章的,在声音智能程序层面,可以做的东西远远不限于语音助理,可以做很多事情。如果条件成熟或者市场需求高,完全可以基于语音助理背后成熟的技术,去做成其他的产品来盈利。
在未来,也许可以尝试做一个SAAS平台,或者硬件模块,给人提供声音操作接口和引擎。
声音领域一直很有意思,我一直在想,关于声音的东西很有趣,包括声控开关,声音指纹,根据声音识别人,音色克隆,TTS等等。
之前想到一个有趣的东西,就是把离线模型,把模型写入到嵌入式系统里面去,让终端智能化,提供这样的技术或者说声音模块,提供这种标准,然后可以卖钱。
语音操作的短板
我之前看到一个人说,语音不适合被拿来做交互,是已经被证明过的事情。看的我心里一慌,不过它说了几个理由,我觉得值得认真考虑一下。
语音容易出现口音,口误,方言等问题。
这里有一个保障语音操作的功能就是声音指纹,就是证明,你是这个人,从而允许你做一些安全的操作。此外,声音指纹也可能造假,所以针对敏感的操作更是要谨慎。
声网
声网是一家有名气的公司。我之前校招的时候听说过,我再次也简单介绍一下声网。
声网(Agora)是一家成立于2014年的全球实时互动云服务开创者和引领者。这家公司专注于提供音视频实时互动的云服务,主要面向企业客户提供应用编程接口(API),使得开发者能够快速地在应用内构建多种实时音视频互动场景。声网的服务覆盖了社交直播、在线教育、企业协作、IoT、医疗、游戏、保险等多个行业,共计100多种场景。声网的实时互动技术服务覆盖全球200多个国家和地区,并在当地提供技术和运营支持。
声网的客户包括小米、陌陌、抖音、新东方、VIPKID、好未来等知名公司。在疫情期间,声网的日均通话分钟数显著增长,达到15.6亿分钟。声网还致力于提供友好的开发者服务,每月为开发者提供10,000分钟的免费使用时长,并提供了丰富的开发者工具和支持。
2020年6月26日,声网的母公司Agora在美国纳斯达克挂牌交易,股票代码为“API”。声网的团队主要由技术人员组成,拥有强大的音视频领域技术能力。此外,声网还提供多种API服务,包括语音视频通话API、互动直播API、实时消息API、实时录制API和实时码流加速API等。
声网在提供实时音视频服务方面具有显著的技术优势,能够支持大规模的实时互动,并保证高质量的音视频传输。公司在全球部署了近百个数据中心和近千台服务器,确保了跨大洲、跨国家、跨运营商网络的实时数据传输质量。
声网这种属于数字供应链底座的公司,感觉还是蛮有前景、蛮有市场的,我很欣赏。
我到底想要什么样的语音助手
昨天和朋友刘洋聊到这个事,他告诉我Iphone有语音控制或者工作流,我去试用了一下。可能不尽完美,但是我能从中学到甚多,我一定要写一篇测评,来描述这个Iphone的语音控制。
我在想一个东西,就是,我想要什么样的语音助手?
我想过,也许不限于一个语音助手。
我需要一个声音转命令的引擎,可以通过自然语言和机器沟通。比如未来我和机器人对话,我让它做什么,它就做什么。要实现这个,需要几步。
第一步 语音能变成文字
第二步 这个引擎能够知晓当前环境,对这个环境比较熟悉或者可以自行学习,这个需要训练
第三步 在当前环境下,文字能被解释成合适的命令,一系列的命令
第四步 不清楚的地方和我反复多轮确认,互相对话,像人一样
第五步 执行
然而,当下最重要的是什么?
1 了解当前的语音助手相关的市场岗位要求,熟悉业界的人都在做什么。
2 厘清到底需要什么技术最重要。
市场上的相关岗位
科大讯飞官网上,曾经列出过一些岗位。小米也有类似的岗位。
科大讯飞的需求
核心研发平台-AI研究算法工程师 研究算法序列
合肥市、西安市2022-04-07发布 硕士研究生及以上 3年 招聘若干人
上海/合肥/西安
工作职责
1、负责语音信号处理、自然语言处理等方向算法的研发及落地;
2、负责算法的优化与工程化实现,并推动在多个行业的应用落地;
3、针对具体业务问题能够结合算法特点,设计合理的落地方案并实施交付
任职要求
1、硕士及以上学历,计算机、信号处理、自动化、应用数学等相关专业,具备一定的数理统计、模式识别、机器学习、自然语言处理等理论知识; // 这个我需要认真学一下
2、英语六级及以上,具备中英文学术论文的调研能力,有从事研究型项目的经历;//这个我试试吧!我觉得问题不大,多读读论文,比如了解语音识别算法的历史。
3、具备较好的计算机编程能力,熟练掌握Python/C++编程;//这个我会
4、具有HTK/Kaldi/TensorFlow/PyTorch/Keras两个以上平台开展工作的经验优先。// 这个必须要会!我要增强的
此岗位为科大讯飞集团统一招聘岗位,人员通过简历筛选、笔试、初试、复试、终审等环节后录用。
可能我最心仪的岗位就是这类吧!我就开始针对性学习吧。
所以,综合心仪的岗位来看,我需要即落实自己的传统岗位,也要学会新技能,带着过去走向未来吧。
教育BG-高级音视频工程师-西安 软件开发序列
工作职责
1、带领团队自主掌握自研实时音视频平台;
2、能够结合业务对平台做整体规划和设计;
3、能够对平台关键指标做持续优化达到业务内一流水平;
4、线上问题快速排查定位和解决。
任职要求
1、本科及以上学历,计算机或相关专业;
2、精通C/C++语言开发,熟悉Linux环境开发,3年及以上开发经验;
3、熟悉网络传输质量优化,熟悉NACK、FEC相关机制及算法;
熟悉音视频频编码标准:H264、VP8、SILK、OPUS等;
熟悉常用流媒体协议:RTP、RTCP、RTMP、RTSP等;
熟悉主流的音视频架构:Mesh、MCU、SFU;
熟练使用FFmpeg等音视频工具的使用;
4、熟悉音视频开源项目优先:Licode、Meooze、Mediasoup、Janus等;
5、有过Webrtc研究或者相关音视频通信软件开发经验者优先;
6、学习能力强,强烈的责任心,具有较强的沟通能力及团队合作精神。
此岗位为科大讯飞集团统一招聘岗位,人员通过简历筛选、笔试、初试、复试、终审等环节后录用。
智能汽车-AI研发工程师-地点不限 软硬件项目管理序列 参考2.5
2023-07-25 发布 本科 4年 招聘1人
工作职责
- 主要从事自然语言处理相关的工作,服务汽车业务;
- 负责汽车相关的人机对话系统核心算法引擎开发;
- 负责将核心算法落地并集成到嵌入式平台,并做好相关内存和性能优化工作;
- 根据客户需求,协助客户完成项目各模块的版本集成,并在项目周期内对客户的常见问题进行沟通与解答。
任职要求
1.统招本科及以上学历,计算机、通信、信号处理等相关专业。至少具备3年以上实际项目研发经验;
2.对Linux有深入了解,了解主流linux发行版及其优缺点 ;
3.精通linux C/C++,熟悉makefile,熟悉linux编译及调试过程;
4.熟悉Linux内核原理及源码和Linux驱动与应用开发;
5.熟悉嵌入式开发,熟悉ARM、MIPS或X86架构;
6.熟悉体系结构、数据结构和各种总线协议;
7.熟悉车载信息娱乐系统开发优先考虑。
此岗位为科大讯飞集团统一招聘岗位,人员通过简历筛选、初试、复试、终审等环节后录用。
智慧医疗-中级交付项目经理-西安软硬件项目管理序列
西安市2024-01-03发布 本科 招聘1人
工作职责
1、负责多项目管理或大型项目管理,带领团队按照公司要求按时完成交付任务,达成区域经营战略和目标;
2、带领团队完成给定的医疗项目部署实施,进行项目管控,协调解决疑难问题,提升团队整体能力,高效完成项目交付和验收;
3、项目过程规范文档编写和输出,优化项目交付过程;
4、贯彻落实公司各项管理规范和规章制度; 5、团队建设,项目交付过程中对团队成员进行辅导,帮助团队成员全面提升能力。
任职要求
业务知识: 1、医疗行业业务知识; 2、项目管理理论知识; 3、一般管理技能和知识。 专业能力/经验: 项目管理:有医疗行业项目管理经验(千万级以上项目),灵活运用项目管理知识和技能;具备良好的统筹、组织和协调能力; 团队管理:有项目团队管理经验(5-10人及以上),管理能力良好; 计算机技能:具备基本计算机网络知识、数据库、服务器硬件等相关知识,有实操经验。 核心通用能力: 沟通:具备良好沟通能力和人际关系技能; 文档:具备良好的文档编写设计能力; 此岗位为科大讯飞集团统一招聘岗位,人员通过简历筛选、笔试、初试、复试、终身等环节后录用。
核心研发平台-AI研究算法工程师(安全审核方向)-西安市研究算法序列
西安市2024-01-04发布本科及以上3年招聘1人
工作职责
1、 负责认知智能及自然语言处理核心算法研究与开发; 2、 负责NLP任务的相关调研、数据分析、模型训练、效果分析优化等工作; 3、 从事公司相关产品和系统中自然语言处理及认知智能功能的效果保障、持续优化;
任职要求
1、 重点大学硕士及以上学历,计算机、信号处理数学、软件工程、电子与通信、自动化等相关专业,研究生3年以上/博士2年以上NLP研发相关工作经历,具备较为扎实的自然语言处理、人机交互等领域研究或开发经验,对于个别具备较强NLP/NN技术能力的应聘者不受专业限制; 2、 英语六级以上,具备中英文学术论文的调研能力。 3、 具备NLP领域实际项目经验,做为项目的主要负责人员进行过相关产品的研发,对深度学习、自然语言处理、大数据等相关领域的最新进展、模型、算法有深刻理解和实操经验; 4、熟悉Python、C++等编码语言中至少一种,熟悉Linux下的编程开发环境,熟悉数据结构及常见算法。 5、具备深度学习、强化学习、知识图谱方面的研究经验和基础;同时熟悉pytorch等主流深度学习框架,并具备模型训练调参等相关经验; 6、具有良好的沟通能力和团队合作精神,认真负责,较强的逻辑思维能力,沟通能力较强,责任心强,吃苦耐劳,能主动积极地面对工作,具备对AI研发及应用落地产业化的强烈热情; 此岗位为科大讯飞集团统一招聘岗位,人员通过简历筛选、笔试、初试、复试、终身等环节后录用。
教育BG-JAVA开发-西安/合肥 软件开发序列
西安市2024-04-15发布 本科 招聘1人
工作职责
1、负责 JAVA 技术方向的产品和项目研发工作; 2、参与架构设计和实现,根据开发流程进行设计,开发,测试,交付以满足需求; 3、参与项目重点、难点的技术攻坚; 4、参与相关系统文档的撰写和维护; 5、负责对初级工程师进行技术指导和解惑; 6、制定项目研发计划,把控项目研发进度,控制项目质量、进度。
任职要求
1、本科及以上学历,计算机或相关专业; 2、5年左右JAVA 开发经验; 3、精通 OO、UML、AOP,熟练掌握 JDBC、JMS、EJB、SSH、Oracle 等,熟悉 ajax,jQuery 等常见技术的使用,熟悉 Java 开发框架,如 SpringMVC、Hibernate 等,熟悉数据库Mysql 的使用,并具有一定优化经验,具有 mongodb 使用经验者优先; 4、有 Tomcat、JBoss,Weblogic、WAS 等开发经验,熟悉 LINUX 操作平台; 5、有承担复杂系统设计相关工作者或者有带团队开发管理工作者优先考虑; 6、思路清晰,思维敏捷,快速的学习能力;善于与他人沟通协作,有强烈的上进心和求知欲。 此岗位为科大讯飞集团统一招聘岗位,人员通过简历筛选、笔试、初试、复试、终审等环节后录用。
教育BG-算法工程师-合肥/西安/武汉研究算法序列
工作职责
1、参与部门NLP系统建设,包括:数据平台、训练平台、文本分类、文本生成、命名实体识别、关系抽取、LLM、Prompt工程等方向的设计和研发工作; 2、参与部门NLP模型大规模分布式训练的方案设计、训练、调优工作; 3、参与客户需求分析和对接,根据客户需求完成NLP系统整体解决方案设计、研发和落地; 4、参与NLP系统的数据分析工作,评估算法效果并进行持续优化改进。
任职要求
1、具备计算机或统计、人工智能相关专业背景或相关工作经验;
2、具备良好的计算机、数据结构、机器学习、自然语言处理等理论知识;具备较好的计算机编程能力,熟练掌握Python编程;
3、熟悉常见深度学习算法和理论,熟练掌握先进的NLP模型如Transformer、BERT、GPT、InstructGPT等;熟练掌握至少一种常见的深度学习框架(Pytorch、TensorFlow等);熟悉NLP模型大规模分布式训练过程。
4、熟悉LLM如讯飞星火的理论知识、训练过程、应用范围以及Prompt调优手段;
5、擅长将算法实际应用的表现抽象出研究问题,并具有一定分析和解决实际问题的能力:
6、从事过自然语言处理、智能语音、计算机视觉等相关方向的研究或开发工作,包括研究论文发表研发项目经历等;
此岗位为科大讯飞集团统一招聘岗位,人员通过简历筛选、笔试、初试、复试、终审等环节后录用。
面试要求技能科普
人机对话系统
人机对话系统是一种允许用户与计算机以自然语言进行交互的系统。这种系统通过理解用户的语音或文本输入,并据此提供响应,模拟了人与人之间的对话。人机对话系统可以应用于多种场景,包括客户服务、虚拟助手、信息检索、智能家居控制等。 人机对话系统的主要组成部分包括:
- 语音识别(ASR) :将用户的语音输入转换为文本。
- 自然语言理解(NLU) :分析和解释文本输入,以理解用户的意图和需求。
- 对话管理:管理对话的流程,决定系统应该提供什么信息或执行什么操作。
- 自然语言生成(NLG) :将系统的响应转换为自然语言的文本。
- 文本到语音(TTS) :将文本响应转换为语音输出。 人机对话系统可以基于规则,也可以基于机器学习,其中深度学习技术在近年来被广泛用于提高系统的性能。人机对话系统的目标是提供流畅、自然的用户体验,使用户感觉就像是在与另一个人进行交流。随着技术的进步,人机对话系统在商业、教育、娱乐等多个领域的应用越来越广泛。
模式识别
模式识别技术是一种人工智能的分支,它涉及使计算机能够识别数据中的模式或规律,并据此做出决策或预测。模式可以是任何形式的数据,如文字、图像、声音或其他任何类型的数据。模式识别技术在许多领域都有应用,包括图像处理、语音识别、自然语言处理、生物信息学和医学诊断等。 模式识别技术通常包括以下几个步骤:
- 数据采集:收集要分析的数据,可能包括图像、音频、文本等。
- 预处理:对数据进行处理,以便更好地提取特征。这可能包括去噪、归一化、分割等步骤。
- 特征提取:从数据中提取最重要的特征,这些特征将用于识别模式。良好的特征提取对于模式识别的成功至关重要。
- 模型训练:使用已标记的数据来训练模型,使其能够识别特定的模式。这通常涉及到机器学习算法。
- 模式分类或回归:模型将尝试对新的、未见过的数据进行分类或回归,以预测其模式或属性。
- 结果验证:评估模型的性能,确保其能够准确地识别模式。这可能需要使用交叉验证或其他技术来验证结果。 模式识别技术在许多现代技术中扮演着关键角色,如面部识别、语音助手和自动驾驶汽车等。随着技术的进步,模式识别技术也在不断发展,以解决更复杂的问题和挑战。
模式识别技术在许多实际应用中都有广泛的使用,以下是一些例子:
-
图像识别:
- 面部识别系统:用于安全监控、手机解锁和社交媒体的照片标记。
- 医学影像分析:如X光片、MRI和CT扫描的自动分析,帮助诊断疾病。
- 自动驾驶汽车:使用摄像头和传感器来识别道路标记、交通信号、行人和其他车辆。
-
语音和语言处理:
- 语音识别:如智能助手(如Siri、Alexa和Google Assistant)和语音到文本服务。
- 自然语言处理:用于机器翻译、情感分析和聊天机器人。
-
生物特征识别:
- 指纹识别:用于身份验证和犯罪现场调查。
- 虹膜识别:用于高安全级别的个人身份验证。
-
金融领域:
- 信用评分:通过分析个人财务历史来评估信用风险。
- 欺诈检测:识别潜在的欺诈交易模式。
-
零售和消费者行为:
- 客户细分:根据购买历史和行为模式对客户进行分类。
- 推荐系统:如Netflix的电影推荐或Amazon的产品推荐。
-
文本分析和挖掘:
- 情感分析:评估社交媒体上的公众情绪。
- 垃圾邮件检测:自动识别和过滤垃圾邮件。
-
环境监测:
- 地震预测:通过分析地震前的地质模式来预测地震。
- 气候分析:识别气候变化趋势和模式。
-
机器人技术:
- 障碍物检测与规避:机器人使用传感器来识别和避开路径中的障碍物。
- 物体抓取:识别和定位物体以进行自动抓取和操纵。 这些例子展示了模式识别技术的多样性和它在不同领域的应用,从提高安全性到增强用户体验,再到改善医疗诊断和环境保护。随着技术的进步,模式识别的应用范围还在不断扩大。
相关工作
2.1 中介绍了 alexa作为语音助手,它无法盈利的尴尬处境。
2.8 介绍了rasa这个人机对话框架
参考
2.1 1年巨亏100亿美元,亚马逊Alexa成烧钱“无底洞”,语音助手为什么不赚钱?创事记新浪科技_新浪网 (sina.com.cn)
2.6 现在有人机对话系统的评测标准吗? - transformer的回答 - 知乎 TODO
2.7 TODO 数字人的未来:数字人对话系统 Linly-Talker + 克隆语音 GPT-SoVITS - Kedreamix的文章 - 知乎 zhuanlan.zhihu.com/p/683841138
2.8 Rasa框架-腾讯云开发者社区-腾讯云 (tencent.com)
第三章 学习算法
西瓜书
西瓜书是个好书,正式名字叫做《机器学习》。
机器学习是计算机科学与人工智能的重要分支领域. 本书作为该领域的入门教材,在内容上尽可能涵盖机器学习基础知识的各方面.
全书共16 章,大致分为3 个部分:
第1 部分(第1~3 章)介绍机器学习的基础知识;
第2 部分(第4~10 章)讨论一些经典而常用的机器学习方法(决策树、神经网络、支持向量机、贝叶斯分类器、集成学习、聚类、降维与度量学习);
第3 部分(第11~16 章)为进阶知识,内容涉及特征选择与稀疏学习、计算学习理论、半监督学习、概率图模型、规则学习以及强化学习等. 每章都附有习题并介绍了相关阅读材料,以便有兴趣的读者进一步钻研探索。
模型的评估与选择
查全率:查的对的里面,实际想要的占多少。
查准率:给出判断的里面,多少是对的。
都是从不同角度评价模型的。
第一个遇到的困难
《机器学习》这本书公式太多了,难道我要返回去学线性代数吗(已经忘了好多了)?这会真的有点头疼。如果大家都说这本书好,那么我可能这个阶段不太适合这本书。
看样子,西瓜书就是一个大而全的。
我于是尝试找了一本其他的书,这本书,《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》,我觉得还可以。
回头来看,个人觉得西瓜书并不是最好的入门学习书籍。公式太多了,适合中级参考。
第二本书 机器学习实战
并不是说放弃了西瓜书,而是对照着看。
摘录一些其中的观点。
使用机器学习方法挖掘大量数据来帮助 发现不太明显的规律。这称作数据挖掘。
这本书里提到一些技术,比如训练一个垃圾邮件识别算法,那么问题来了,有测试数据集吗?
开发环境
jupyter设置python
Jupyter Notebook 可以设置 Python 路径。您可以通过修改 Jupyter Notebook 的配置文件来设置 Python 路径。具体步骤如下:
- 找到 Jupyter Notebook 的配置文件
jupyter_notebook_config.py
。这个文件通常位于~/.jupyter
目录下。如果没有这个文件,可以通过运行jupyter notebook --generate-config
命令来生成。 - 打开
jupyter_notebook_config.py
文件,找到c.NotebookApp.notebook_dir
这一行。这个选项用于设置 Jupyter Notebook 的启动目录。 - 在该文件中添加以下内容来设置 Python 路径:
import sys
sys.path.append('/path/to/your/python/directory')
将 /path/to/your/python/directory
替换为您要添加的 Python 路径。
- 保存并关闭
jupyter_notebook_config.py
文件。 - 重启 Jupyter Notebook,新的 Python 路径应该已经生效。 注意:修改配置文件可能需要您具有管理员权限。如果您遇到权限问题,可以尝试使用
sudo
命令来打开文件。
准备其他环境
创建环境
virtualenv mlenv
source mlenv/bin/activate
pip install -U jupyter matplotlib numpy pandas scipy scikit-learn
Jupyter 和 Python 是相互关联但又独立的概念。 Python 是一种广泛使用的编程语言,它有自己的一系列库和工具,可以用于各种编程任务,从数据分析到网站开发,再到自动化脚本等。 Jupyter 是一个开源项目,它提供了一个交互式计算环境,允许你创建和共享包含实时代码、方程、可视化和解释性文本的文档。Jupyter 支持多种编程语言,包括 Python、R 和 Julia。Jupyter Notebook 是 Jupyter 项目的一个组件,它允许用户创建和共享包含实时代码的文档。 虽然 Jupyter 可以支持多种编程语言,但它通常与 Python 一起使用,因为 Python 是数据科学和科学计算中最流行的语言之一。Jupyter Notebook 本身是用 Python 编写的,而且许多 Jupyter 的扩展和插件也是为 Python 设计的。 简而言之,Python 是一种编程语言,而 Jupyter 是一个可以让用户以交互式方式使用 Python(以及其他语言)的工具。它们可以独立使用,但在数据科学和科学计算领域,它们经常一起使用。
第三章番外 机器学习实战笔记
第一章
事实上,在一些特定的应用 中机器学习已经存在几十年了,比如光学字符识别(Optical Character Recognition,OCR)。但是直到20世纪90年代,第一个影 响了数亿人的机器学习应用才真正变成主流,它就是垃圾邮件过滤 器。虽然它并不是一个有自我意识的天网系统(Skynet),但是从技术上来说是符合机器学习的(它可以很好地进行学习,以至于用户几 乎不用将某个邮件标记为垃圾邮件)。后来出现了数以百计的机器学习应用,支撑了数百个现在经常使用的产品和特性(从更好的推荐系 统到语音搜索)。
机器学习的另一个亮点是善于处理对于传统方法而言太复杂或没有 已知算法的问题。
在探索机器学习新大陆之前,先观察地图来学习下这片大陆上的 主要地区和最显著的地标:监督学习和无监督学习、在线学习和批量 学习、基于实例学习和基于模型学习。然后我们来看一个典型的机器 学习项目的工作流程,讨论你可能会遇到的难点,并介绍如何评估和 微调一个机器学习系统。
与之相关的一个任务是降维,降维的目的是在不丢失太多信息的前 提下简化数据。方法之一是将多个相关特征合并为一个。例如,汽车里 程与其使用年限存在很大的相关性,所以降维算法会将它们合并成一个 代表汽车磨损的特征。这个过程叫作特征提取。
通常比较好的做法是,先使用降维算法减少训练数据的维度, 再将其提供给另一个机器学习算法(例如有监督学习算法)。这会使它 运行得更快,数据占用的磁盘空间和内存都会更小,在某些情况下,执 行性能也会更高。
最后,还有一个常见的无监督任务是关联规则学习,其目的是挖掘 大量数据,发现属性之间的有趣联系。例如,假设你开了一家超市,在 销售日志上运行关联规则之后发现买烧烤酱和薯片的人也倾向于购买牛 排。那么,你可能会将这几样商品摆放得更近一些。
半监督学习
由于通常给数据做标记是非常耗时和昂贵的,你往往会有很多未标 记的数据而很少有已标记的数据。有些算法可以处理部分已标记的数 据。这被称为半监督学习(见图1-11)。
监督学习
根据训练期间接受的监督数量和监督类型,可以将机器学习系统分 为以下四个主要类别:有监督学习、无监督学习、半监督学习和强化学 习。
在有监督学习中,提供给算法的包含所需解决方案的训练集称为标签。
分类任务是一个典型的有监督学习任务。垃圾邮件过滤器就是一个 很好的示例:通过大量的电子邮件示例及其所属的类别(垃圾邮件还是常规邮件)进行训练,然后学习如何对新邮件进行分类。
另一个典型的任务是通过给定一组称为预测器的特征(里程、使用 年限、品牌等)来预测一个目标数值(例如汽车的价格)。这种类型的 任务称为回归。要训练这样一个系统,需要提供大量的 汽车示例,包括它们的预测器和标签(即价格)
这里是一些最重要的有监督学习算法(本书中会介绍):
·k-近邻算法
·线性回归
·逻辑回归
·支持向量机(SVM)
·决策树和随机森林
·神经网络
传统机器学习vs深度学习
传统机器学习和深度机器学习是机器学习领域的两个子集,它们在算法、数据需求和性能方面有所不同。 传统机器学习: 传统机器学习通常指的是使用相对简单的算法来处理数据并做出预测的任务。这些算法包括但不限于:
- 线性回归
- 逻辑回归
- 决策树
- 随机森林
- 支持向量机
- K-最近邻
- 聚类算法(如K-均值) 传统机器学习算法通常需要手工特征工程,即专业人员根据问题的性质和数据的特征来设计特征,这些特征能够帮助算法更好地学习和预测。传统机器学习算法在数据量不是特别大且特征工程可行的情况下非常有效。 深度机器学习(也称为深度学习): 深度学习是一种特殊的机器学习方法,它使用包含多个处理层的人工神经网络来学习数据的表示。深度学习模型能够自动从原始数据中学习层次化的特征表示,这些模型包括:
- 多层感知器(MLP)
- 卷积神经网络(CNN,用于图像识别等)
- 循环神经网络(RNN,用于序列数据处理)
- 长短期记忆网络(LSTM,RNN的一种,用于处理长序列)
- 自编码器
- 生成对抗网络(GAN) 深度学习在处理大量数据和高维数据(如图像、视频、语音和文本)时表现出色,尤其是在特征自动提取方面。深度学习模型通常需要大量的数据和计算资源来训练。
总结:
- 传统机器学习依赖于手工特征工程,适用于数据量适中且特征明显的问题。
- 深度学习能够自动从原始数据中学习特征,适用于数据量大且特征不明显的高维数据处理。 两者都是机器学习领域的重要组成部分,选择哪种方法取决于具体的应用场景、数据可用性和计算资源。
让应用对语音命令做出反应
这是语音识别,要求能处理音频采样。因为音频是很长、很复杂 的序列,所以一般使用RNN、CNN或者Transformer(见第15章和第16 章)进行处理。
机器学习的挑战
数据量够大,会消除模型之间的差距,反过来看,研究算法跟准备数据,哪个更重要?
数据如果不具有代表性,会让模型跑偏
端到端的机器学习:
- 在机器学习中,端到端学习是指模型直接从原始数据输入到最终决策输出的整个过程,而不需要多个独立的处理步骤。
第二章 准备环境
超参数
在机器学习中,超参数是模型参数以外的参数,通常不是通过学习算法自动估计的。它们用来指导学习算法,并且在算法开始学习之前就需要设定。超参数影响模型的学习过程和性能,通常需要根据具体的应用场景进行优化。 常见的超参数包括:
- 学习率(Learning Rate):控制模型在优化过程中参数更新的幅度。
- 批量大小(Batch Size):在每次参数更新中使用的样本数量。
- 损失函数(Loss Function):用于评估模型预测值与真实值之间差异的函数。
- 优化器(Optimizer):决定如何根据损失函数调整模型参数的算法。
- 网络结构(Network Architecture):在神经网络中,如层数、每层的神经元数目等。
- 树的深度或数量:在决策树或集成学习中,树的深度或集成中树的数量。
- 正则化参数:如L1、L2正则化中的惩罚系数,用于防止模型过拟合。 通常,超参数的优化是通过实验来完成的,如网格搜索(Grid Search)、随机搜索(Random Search)、贝叶斯优化(Bayesian Optimization)等方法。在实践中,超参数的优化是一个非常重要的步骤,因为它能显著影响模型的性能。
可以认为,超参数类似于人生下来的设定,比如家庭背景,父母,智商程度等等。
scikit-learn简介
Scikit-Learn(简称 Sklearn)是一个开源的机器学习库,它是在Python编程语言中实现的。Scikit-Learn提供了一个简单而一致的API,用于访问一系列监督和非监督学习的算法,以及这些算法的评估和数据分析工具。 Scikit-Learn的主要特点包括:
- 广泛的算法支持:包括分类、回归、聚类、数据降维、模型选择和预处理工具等。
- 统一的API:所有模型都遵循相同的接口,这使得学习和切换不同算法变得简单。
- 易于使用:Scikit-Learn的设计理念是“约定优于配置”,这意味着默认参数对于大多数任务来说都是合理的,用户可以快速上手。
- 详细的文档和示例:Scikit-Learn的官方文档非常全面,包含了大量的示例代码和教程,方便用户学习和参考。
- 广泛的社区支持:由于它的流行,Scikit-Learn有一个活跃的社区,用户可以通过论坛、邮件列表等方式获得帮助。
- 集成性与兼容性:可以与NumPy、SciPy、Pandas等其他Python科学计算库无缝集成。 Scikit-Learn是基于BSD许可发布的,可以免费用于商业和研究。它是目前最流行的机器学习库之一,被广泛应用于学术界和工业界。由于它的易用性和强大的功能,Scikit-Learn是许多机器学习初学者和实践者的首选工具。
sklearn教程
参考 Scikit-Learn简明教程 — Scikit-Learn简明手册 1.0 文档 (baoshu.red)
fetch_openml
fetch_openml
函数会利用本机缓存。当你使用 fetch_openml
从 OpenML 数据库下载数据集时,它会在你的本地文件系统中缓存所下载的数据集。这意味着在你第一次下载一个数据集后,后续的调用 fetch_openml
获取同一个数据集时,将直接从缓存中读取,而不会再次从互联网下载,这样可以节省时间并减少网络流量。
PyTorch
PyTorch是一个开源的机器学习库,由Facebook的人工智能研究团队开发,并得到了广泛的应用和研究社区的支持。它主要用于应用如计算机视觉和自然语言处理等领域的深度学习,但也可以用于传统的机器学习任务。 以下是PyTorch的一些主要特点和功能:
- 动态计算图:PyTorch使用动态计算图(也称为即时执行计算图),这意味着图的构建和修改可以在运行时进行,提供了极大的灵活性。这与静态计算图框架(如TensorFlow的早期版本)形成对比,后者在执行前需要定义整个计算图。
- 易于使用:PyTorch的API设计简洁直观,易于理解和使用。它允许用户以更接近Python原生的编程方式来构建和训练神经网络。
- 强大的GPU加速:PyTorch提供了深度集成的CUDA支持,可以轻松地将计算任务从CPU转移到GPU,以加速训练和推理过程。
- 丰富的库生态:PyTorch拥有一个庞大的生态系统,包括各种预训练模型(如TorchVision、TorchText、TorchAudio)和工具(如TorchServe用于模型部署)。
- 强大的社区支持:由于它的流行和灵活性,PyTorch有一个非常活跃的社区,提供大量的教程、论坛讨论和第三方库。
- 研究友好:PyTorch的灵活性和直观性使得它在研究社区中非常受欢迎,许多最新的研究成果和论文的代码实现都是使用PyTorch编写的。
- 与Python深度集成:PyTorch与Python的科学计算堆栈(如NumPy)紧密集成,使得数据科学家和工程师可以轻松地在PyTorch和其他工具之间切换。 PyTorch适用于广泛的机器学习和深度学习项目,从简单的实验到复杂的生产系统。它的设计哲学强调用户体验和灵活性,使得研究人员和开发者能够快速实现自己的想法。
sklearn和pytorch的区别
PyTorch和Scikit-Learn是两个流行的机器学习库,它们各自有不同的特点和用途。以下是它们之间的一些主要区别:
-
核心功能和目标用户:
- Scikit-Learn:设计用于传统的机器学习任务,如分类、回归、聚类等。它主要面向那些需要简单、可解释的模型,并且数据量不是非常庞大的情况。Scikit-Learn非常适合初学者和研究者,因为它提供了简单易用的API和广泛的算法。
- PyTorch:是一个深度学习框架,支持复杂的神经网络设计和训练。它面向那些需要进行大规模计算和复杂数据处理(如图像、音频和文本)的研究者和开发者。PyTorch提供了灵活的动态计算图(称为“autograd”),这使得它在研究社区中非常受欢迎,尤其是在需要自定义层或损失函数的情况下。
-
灵活性和复杂性:
- Scikit-Learn:提供了一系列预定义的模型和算法,用户可以通过调整参数来适应不同的任务。它的设计更倾向于“黑盒”模型,用户不需要深入了解算法的实现细节。
- PyTorch:提供了更多的灵活性,允许用户定义自己的模型和计算图。这使得PyTorch非常适合于研究和开发新的深度学习模型。
-
计算图和动态性:
- Scikit-Learn:不提供计算图功能,它更像是一个静态的库,用户直接调用函数来训练和评估模型。
- PyTorch:提供了动态计算图,这意味着用户可以在运行时定义、修改和执行计算图。这对于某些任务(如自然语言处理中的变长序列)非常有利。
-
GPU加速:
- Scikit-Learn:大多数模型仅支持CPU计算,虽然一些外部库(如CUDA)可以用于加速特定的模型,但Scikit-Learn本身并不直接支持GPU加速。
- PyTorch:原生支持GPU加速,这使得在训练大型神经网络时可以获得显著的性能提升。
-
社区和生态系统:
- Scikit-Learn:有一个庞大的社区,特别是在传统机器学习领域。它与其他Python科学计算库(如NumPy、Pandas)紧密集成。
- PyTorch:在深度学习社区中非常流行,特别是在研究和学术领域。它也有一个活跃的社区,并且与许多其他深度学习工具和库兼容。 总的来说,Scikit-Learn更适合传统的机器学习任务,而PyTorch更适合深度学习和需要高度自定义模型的研究和开发。两者都是开源项目,可以根据需要免费使用。
动手操作-非常重要
第二章,非常的让人振奋人心,可以立马着手操作了。
在2.3节,获取数据这里,就可以着手开始了解和操作了。
书本的科学性
插一嘴,我认为机器学习实战这本书非常的科学,非常适合自己学习。
第三章 分类
第一个程序 打印5
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist["data"], mnist["target"]
print(type(X)) # <class 'pandas.core.frame.DataFrame'>
X = X.to_numpy() # 将DataFrame转换为NumPy数组
import matplotlib as mpl
import matplotlib.pyplot as plt
some_digit = X[0] # 现在X是一个NumPy数组,可以安全地访问X[0]
some_digit_image = some_digit.reshape(28, 28)
plt.imshow(some_digit_image, cmap="binary")
plt.axis("off")
plt.show()
第二个程序
# X_train是训练集(前6 万张图片),y_train是测试集 (最后1万张图片)
X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]
y_train_5 = (y_train == 5)
y_test_5 = (y_test == 5)
from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train, y_train_5)
模型的保存
模型训练完成后,通常会得到一个包含模型参数的文件,这些参数是模型在学习数据过程中通过算法优化得到的。具体的样子取决于模型的类型和用途。
-
在文件形式上:
- 权重和偏差:大多数机器学习模型,尤其是神经网络,都有一系列的权重和偏差,这些参数决定了模型对输入数据的响应方式。这些参数通常保存在一个或多个文件中。
- 架构定义:模型的架构,即层和层之间的连接方式,也可能保存在一个文件中,或者以代码的形式在训练后的模型文件中编码。
- 元数据:可能还包括一些元数据,如训练时间、使用的损失函数、优化器设置等。
-
在表现形式上:
- 对于神经网络模型,可以有一个可视化的表示,显示不同层的类型(如卷积层、全连接层等)和它们之间的连接。
- 对于决策树或随机森林模型,模型可以表示为一组决策规则或树的集合。
- 对于线性模型,模型可以表示为权重向量和一个偏差项。
-
在应用上:
- 模型可以集成到一个应用程序中,用户可以通过界面与模型交互。
- 模型可以部署到服务器上,通过API提供预测服务。
- 模型可以嵌入到设备中,如移动设备或物联网设备,以便在本地进行实时预测。
-
在评估上:
- 模型通常会有一组性能指标,如准确率、召回率、F1分数等,用于评估模型在测试集上的表现。
- 有时还会提供学习曲线、混淆矩阵等评估工具,以帮助理解模型的性能和可能的改进方向。 在实际应用中,模型的具体形态和大小可以有很大差异,从几KB的简单线性模型到几十GB的大型深度学习模型。模型的最终形态取决于它的用途和部署环境。
使用TensorFlow框架训练的线性模型,最终的保存形式通常是一个或多个文件,这些文件包含了模型的权重、偏差、架构和其他必要的元数据。TensorFlow提供了多种方式来保存和恢复模型,最常用的是以下两种:
-
SavedModel格式: SavedModel是TensorFlow推荐的模型保存格式,它可以保存整个模型(包括架构和参数)以便于部署。保存后的模型目录包含一个以
.pb
(Protocol Buffers)格式保存的模型文件和一个变量文件夹,其中包含了模型的权重和其他变量。 保存模型:import tensorflow as tf # 假设`model`是你的线性模型 model = ... # 保存模型 tf.saved_model.save(model, "path/to/model")
这将创建一个包含模型文件的目录。
-
HDF5(Keras)格式: 如果你的线性模型是用Keras(TensorFlow的高级API)创建的,你可以保存模型为HDF5格式,文件扩展名为
.h5
。 保存模型:model.save("path/to/model.h5")
这将创建一个包含模型权重、架构和优化器的单个
.h5
文件。 恢复模型: 对于SavedModel格式:loaded_model = tf.saved_model.load("path/to/model")
对于HDF5格式:
loaded_model = tf.keras.models.load_model("path/to/model.h5")
在这两种情况下,保存的模型都可以被用于进行预测或进一步的分析。SavedModel格式通常用于TensorFlow Serving或TensorFlow Lite,而HDF5格式则更适用于Keras模型的保存和加载。
模型的部署
模型部署是将训练好的模型集成到实际应用中,使其能够接收输入数据并产生预测的过程。部署模型的方法取决于应用的需求、环境和模型本身。以下是一些常见的部署策略:
-
在线部署:
- 将模型部署到服务器上,通过API接口提供服务。用户或应用程序可以通过网络请求向服务器发送数据,服务器返回模型的预测结果。
- 使用容器技术(如Docker)打包模型及其依赖环境,然后部署到云平台(如AWS、Google Cloud、Azure)或私有服务器上。
-
离线部署:
- 将模型嵌入到移动应用或桌面应用中,使其能够在本地运行,无需与服务器通信。
- 使用TensorFlow Lite、ONNX Runtime等工具将模型转换为适用于移动设备或边缘设备的格式。
-
批处理部署:
- 在数据中心或高性能计算环境中,对大量数据进行批量处理,模型用于离线分析或定期生成报告。
-
实时部署:
- 在实时系统(如自动驾驶、实时交易系统)中,模型需要快速处理输入数据并产生即时响应。 部署模型的步骤通常包括:
-
模型转换(如果需要):
- 将模型转换为适合部署的格式。例如,对于移动设备,可能需要将模型转换为TensorFlow Lite或Core ML格式。
-
模型打包:
- 使用Docker等工具将模型及其依赖环境打包,确保部署环境的一致性。
-
环境准备:
- 准备部署环境,包括安装必要的依赖库、配置服务器和存储解决方案。
-
API开发:
- 开发API接口,允许用户或应用程序发送数据给模型并接收预测结果。
-
安全性和隐私:
- 确保模型和数据的安全,实施适当的认证和授权机制。
-
监控和日志:
- 实施监控和日志记录,以便于追踪模型的性能和可能的异常。
-
测试:
- 在部署之前对模型进行彻底的测试,确保其在生产环境中能够稳定运行。
-
持续维护:
- 定期更新模型以适应新的数据分布或业务需求。 选择哪种部署策略取决于多种因素,包括模型的复杂性、预测的实时性要求、数据敏感性、预算限制等。成功的模型部署需要跨学科的知识,包括数据科学、软件工程、系统架构和运维。
部署成flask服务
要将一个使用scikit-learn训练的模型部署到线上,可以使用Flask这样的轻量级Web框架来创建一个API。以下是一个简单的步骤指南:
-
准备环境: 确保你的开发环境中安装了Flask和scikit-learn。可以使用
pip
来安装:pip install Flask scikit-learn
-
创建Flask应用: 创建一个新的Python文件,例如
app.py
,并导入Flask和其他必要的库:from flask import Flask, request, jsonify import joblib import numpy as np app = Flask(__name__)
-
加载模型: 使用
joblib
加载你训练好的模型。假设你的模型保存在model.pkl
文件中:model = joblib.load('model.pkl')
-
定义预测路由: 定义一个路由,它将接受POST请求并使用模型进行预测:
@app.route('/predict', methods=['POST']) def predict(): # 获取JSON数据 data = request.get_json(force=True) # 将数据转换为NumPy数组 prediction_input = np.array(data['input']).reshape(1, -1) # 使用模型进行预测 prediction = model.predict(prediction_input) # 返回预测结果 return jsonify({'prediction': prediction.tolist()})
-
运行Flask应用: 在
app.py
文件的末尾添加以下代码来运行应用:if __name__ == '__main__': app.run(debug=True)
-
测试本地服务器: 在你的本地机器上运行
app.py
:python app.py
打开浏览器并访问
http://127.0.0.1:5000/predict
来测试API。 -
部署到线上:
- 使用
gunicorn
作为WSGI HTTP服务器来运行你的Flask应用。 - 将你的应用和模型文件部署到云服务器或虚拟私有服务器(VPS)上。
- 配置Web服务器(如Nginx)作为反向代理,将请求转发到gunicorn。
- 确保服务器安全,配置HTTPS和防火墙。
- 使用
-
监控和维护:
- 监控应用的性能和日志。
- 定期更新模型以适应新的数据。 请注意,这只是一个基本的部署流程。在实际部署中,你可能需要考虑更多的因素,如安全性、性能优化、负载均衡、自动扩展等。此外,如果你的模型需要预处理或后处理步骤,你需要在预测路由中添加相应的代码。
predict方法
在机器学习中,predict
方法是模型的一个函数,用于对新数据点进行预测。这个方法接受一个或多个数据点作为输入,并返回模型对这些数据点的预测结果。具体的预测类型(如分类或回归)取决于模型的类型。
以下是predict
方法的一般工作流程:
- 数据准备:在调用
predict
方法之前,需要确保输入数据符合模型的预期格式。这可能包括数据的形状、类型和范围。例如,对于scikit-learn中的模型,通常需要将输入数据转换为NumPy数组或Pandas DataFrame,并且特征的数量需要与模型训练时使用的特征数量相匹配。 - 预处理:如果模型在训练过程中使用了某些预处理步骤(如标准化、归一化、编码等),那么在预测时也需要对输入数据进行相同的预处理。
- 模型推理:
predict
方法内部会使用模型的参数和算法对新数据点进行推理。对于回归模型,这通常意味着计算一个连续值作为输出。对于分类模型,它会输出一个类别标签。 - 输出结果:
predict
方法的返回值是模型的预测结果。对于回归模型,这可能是一个单个的数值或一个数值数组。对于分类模型,这通常是类别索引或类别标签。
下面是一个使用scikit-learn中线性回归模型的predict
方法的例子:
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
import numpy as np
# 加载数据集
data = load_boston()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 使用模型进行预测
predictions = model.predict(X_test)
# 输出预测结果
print(predictions)
在这个例子中,predict
方法被用来对测试集X_test
进行预测,返回的predictions
是一个数组,包含了模型对每个测试数据点的房价预测。
numpy和pandas基本入门
NumPy和Pandas是Python中用于数据分析和数据处理的两个非常强大的库。下面是它们各自的简单教程。
NumPy教程
NumPy是一个用于处理大型多维数组和矩阵的库,它提供了大量的数学函数来操作这些数组。
-
安装NumPy:
pip install numpy
-
创建数组:
import numpy as np # 创建一个一维数组 arr = np.array([1, 2, 3, 4, 5]) # 创建一个二维数组(矩阵) matrix = np.array([[1, 2], [3, 4], [5, 6]])
-
数组属性:
print(arr.ndim) # 维度 print(arr.shape) # 形状 print(arr.size) # 元素数量
-
索引和切片:
print(arr[0]) # 第一个元素 print(arr[-1]) # 最后一个元素 print(arr[2:4]) # 第三到第四个元素(不包括第四个)
-
数据类型:
arr = np.array([1, 2, 3], dtype=float)
-
数学运算:
arr = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) print(arr + arr2) # 元素级加法 print(arr * arr2) # 元素级乘法 print(arr ** 2) # 元素级幂运算
-
广播:
arr = np.array([[1, 2, 3], [4, 5, 6]]) arr2 = np.array([10, 10, 10]) print(arr + arr2) # 广播加法
Pandas教程
Pandas是一个数据分析和操作库,它提供了数据结构和数据分析工具,用于处理和分析结构化数据。
-
安装Pandas:
pip install pandas
-
创建DataFrame:
import pandas as pd # 创建一个DataFrame data = {'name': ['Tom', 'Jerry', 'Mickey'], 'age': [20, 21, 22], 'city': ['New York', 'Los Angeles', 'Chicago']} df = pd.DataFrame(data)
-
查看DataFrame:
print(df.head()) # 显示前几行 print(df.tail()) # 显示后几行 print(df.shape) # 行数和列数
-
选择数据:
print(df['name']) # 选择一列 print(df[['name', 'age']]) # 选择多列 print(df.loc[0]) # 选择第一行 print(df.loc[0, 'name']) # 选择第一行的'name'列
-
过滤数据:
print(df[df['age'] > 20]) # 过滤年龄大于20的数据
-
缺失值处理:
df['age'].fillna(df['age'].mean(), inplace=True) # 填充缺失值
-
分组和聚合:
print(df.groupby('city').mean()) # 按城市分组,计算平均年龄
-
合并数据:
df2 = pd.DataFrame({'name': ['Tom', 'Jerry'], 'score': [90, 80]}) print(pd.merge(df, df2, on='name')) # 根据'name'列合并数据
这些是NumPy和Pandas的基本操作,它们的功能远不止于此。要深入学习,建议查看官方文档和教程。
混淆矩阵
总体思路就是统计A类 别实例被分成为B类别的次数。例如,要想知道分类器将数字3和数字5 混淆多少次,只需要通过混淆矩阵的第5行第3列来查看。
混淆矩阵中的行表示实际类别,列表示预测类别。本例中第一行表 示所有“非5”(负类)的图片中:53 057张被正确地分为“非5”类别 (真负类),1522张被错误地分类成了“5”(假正类);第二行表示 所有“5”(正类)的图片中:1325张被错误地分为“非5”类别(假负 类),4096张被正确地分在了“5”这一类别(真正类)。
实际情况 非5 是5 判断非5:真非 假非 判断是5:假是 真是
准确率 以第二行为核心
召回率以第二列为核心
模型的权衡
在某些情况下,你更关心的是精度,而另一些 情况下,你可能真正关心的是召回率。
例如,假设你训练一个分类器来 检测儿童可以放心观看的视频,那么你可能更青睐那种拦截了很多好视频(低召回率),但是保留下来的视频都是安全(高精度)的分类器, 而召回率虽不高,但是在产品中可能会出现一些非常糟糕的视频的分 类器(这种情况下,你甚至可能会添加一个人工流水线来检查分类器选出来的视频)。
反过来说,如果你训练一个分类器通过图像监控来检测小偷:你大概可以接受精度只有30%,但召回率能达到99%(当然,安保人员会收到一些错误的警报,但是几乎所有的窃贼都在劫难逃)。
遗憾的是,鱼和熊掌不可兼得,你不能同时增加精度又减少召回率,反之亦然。这称为精度/召回率权衡
我们来看看SGDClassifier如何进行分类决 策。对于每个实例,它会基于决策函数计算出一个分值,如果该值大于 阈值,则将该实例判为正类,否则便将其判为负类。
上图显示了从左 边最低分到右边最高分的几个数字。假设决策阈值位于中间箭头位置 (两个5之间):在阈值的右侧可以找到4个真正类(真的5)和一个假 正类(实际上是6)。因此,在该阈值下,精度为80%(4/5)。但是在6 个真正的5中,分类器仅检测到了4个,所以召回率为67%(4/6)。
现 在,如果提高阈值(将其挪动到右边箭头的位置),假正类(数字6) 变成了真负类,因此精度得到提升(本例中提升到100%),但是一个真正类变成一个假负类,召回率降低至50%。反之,降低阈值则会在增加 召回率的同时降低精度。
现在你有一个90%精度的分类器了(或者足够接近)!如你所见, 创建任意一个你想要的精度的分类器是相当容易的事情:只要阈值足够 高即可!然而,如果召回率太低,精度再高,其实也不怎么有用!
随机梯度下降分类器SGD
这个分类器的优势是能够有效处理非常大型的数据集。这部分是因为SGD 独立处理训练实例,一次一个(这也使得SGD非常适合在线学习。
SGDClassifier在训练时是完全随机的(因此得名“随机”),如果你希望得到可复现的结果,需要设置参数 random_state。
示例代码
from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train, y_train_5)
sgd_clf.predict([some_digit])
# 返回 array([ True]) 表示 some_digit == 5
第四章 训练模型
本章我们将从最简单的模型之一——线性回归模型,开始介绍两 种非常不同的训练模型的方法:
第一种,通过“闭式”方程,直接计算出最拟合训练集的模型参数(也 就是使训练集上的成本函数最小化的模型参数)。
第二种,使用迭代优化的方法,即梯度下降(GD),逐渐调整模型参数 直至训练集上的成本函数调至最低,最终趋同于第一种方法计算出来 的模型参数。我们还会研究几个梯度下降的变体,包括批量梯度下 降、小批量梯度下降以及随机梯度下降。等我们进入到第二部分神经 网络的学习时,会频繁地使用这几个的变体。
这两种知识,让人感觉非常的兴奋啊!
第五章 支持向量机
传说中的支持向量机,我终于学到你这了,这本书讲的非常的通俗易懂,所以我认为我有很大的机会揭开你的面纱,看清楚你到底是怎么回事。
我记得最近查阅SVM的时候,了解到SVM适合做分类任务。
作者说,它是机器学习领域最受欢迎的模型之一,任何对 机器学习感兴趣的人都应该在工具箱中配备一个。SVM特别适用于中小 型复杂数据集的分类。
书中5.1中,非常清晰的说明了SVM是什么,即最宽的街道。
第一段SVM代码&机器学习代码
import numpy as np
from sklearn import datasets
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
iris = datasets.load_iris()
X = iris["data"][:, (2, 3)] # petal length, petal width
y = (iris["target"] == 2).astype(np.float64) # Iris virginica
svm_clf = Pipeline([ ("scaler", StandardScaler()),("linear_svc", LinearSVC(C=1, loss="hinge")),])
svm_clf.fit(X, y)
这段代码是使用Python编写的,它使用了Scikit-learn库来创建一个支持向量机(SVM)分类器,用于识别鸢尾花数据集(Iris dataset)中的Iris virginica
品种。下面是代码的逐步解释:
-
导入库:
import numpy as np from sklearn import datasets from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import LinearSVC
这些行代码导入了所需的库和模块。
numpy
是一个数学库,用于进行数值计算。sklearn
是Scikit-learn库,它提供了许多机器学习算法和工具。 -
加载鸢尾花数据集:
iris = datasets.load_iris()
这行代码加载了内置的鸢尾花数据集,这是一个常用的用于分类任务的数据集,包含了三种不同鸢尾花的萼片和花瓣的长度和宽度。
-
选择特征和标签:
X = iris["data"][:, (2, 3)] # petal length, petal width y = (iris["target"] == 2).astype(np.float64) # Iris virginica
这两行代码选择了数据集中的特征和标签。
X
是特征矩阵,这里只选择了花瓣的长度和宽度作为特征。y
是标签向量,它是一个布尔数组,表示每个样本是否是Iris virginica
(标签为2)。astype(np.float64)
将布尔数组转换为浮点数组,其中True
变为1,False
变为0。 -
创建SVM分类器管道:
svm_clf = Pipeline([ ("scaler", StandardScaler()), ("linear_svc", LinearSVC(C=1, loss="hinge")), ])
这段代码创建了一个管道,它将两个步骤组合在一起:首先是
StandardScaler()
,它对特征进行标准化;然后是LinearSVC()
,它是一个线性支持向量机分类器,使用hinge损失函数,并且正则化参数C
设置为1。 -
训练分类器:
svm_clf.fit(X, y)
这行代码训练了SVM分类器。它使用
X
作为特征矩阵,y
作为标签向量,通过管道中的步骤对数据进行处理和分类器的训练。 总结来说,这段代码的目的是使用线性支持向量机分类器对鸢尾花数据集中的Iris virginica
进行分类,通过选择合适的花瓣特征,并对特征进行标准化处理。训练好的分类器可以用于预测新的数据点是否属于Iris virginica
。
参考
3.1 Pytorch 最全入门介绍,Pytorch入门看这一篇就够了 - 掘金 (juejin.cn)
第十章 keras人工神经网络
书中写到,人工神经网络(ANN)是深度学习的核心。它们用途广泛、功能强大且可 扩展,使其非常适合处理大型和高度复杂的机器学习任务,例如对数 十亿张图像进行分类(例如Google Images),为语音识别服务(例如 Apple的Siri)提供支持,每天向成千上万的用户推荐(例如 YouTube)观看的最佳视频,或学习在围棋游戏(DeepMind的 AlphaGo)中击败世界冠军。
书中的介绍大概如此,本章的第一部分介绍了人工神经网络,首先是对第一个ANN架构的 快速浏览,然后是今天广泛使用的多层感知机(MLP)(其他架构将在 第11章中进行探讨)。在第二部分中,我们将研究如何使用流行的 Keras API实现神经网络。这是设计精巧、简单易用的用于构建、训 练、评估和运行神经网络的API。但是,不要被它的简单性所迷惑:它 的表现力和灵活性足以让你构建各种各样的神经网络架构。
令人惊讶的是,人工神经网络已经存在很长一段时间了:它们于 1943年由神经生理学家Warren McCulloch和数学家Walter Pitts首次提 出。McCulloch和Pitts在其具有里程碑意义的论文“A Logical Calculus of Ideas Immanent in Nervous Activity[1] ”中,提出了 一种简化的计算模型,该模型计算了生物神经元如何在动物大脑中协同 工作,利用命题逻辑进行复杂的计算。这是第一个人工神经网络架构。 从那时起,我们看到许多其他架构被发明出来。
科普
keras
Keras 是一个开源的神经网络库,它能够以 Python 语言运行在 TensorFlow、CNTK 或 Theano 之上。它是由 Google 的软件工程师 François Chollet 开发的,旨在快速实验神经网络的构建,同时保持代码的简洁性和可读性。
Keras 提供了高层次的、模块化的接口,这使得用户能够以最小的时间代价搭建不同类型的神经网络。它的设计哲学是用户友好、模块化和可扩展性。通过 Keras,用户可以轻松地定义复杂的前馈神经网络、循环神经网络以及卷积神经网络,同时支持多种优化器、激活函数和成本函数。
Keras 的易用性使其在学术界和工业界都得到了广泛的应用,无论是初学者还是经验丰富的机器学习工程师,都可以通过 Keras 来构建和训练自己的模型。
Keras 和 TensorFlow 之间的关系是密切的。Keras 最初是作为一个在 Theano 和 TensorFlow 之上的高级神经网络API而被开发的,它提供了一个更简洁、更易于使用的界面来构建和训练神经网络。由于 Keras 的易用性和模块化设计,它迅速获得了广泛的关注和使用。
在 TensorFlow 1.x 版本中,TensorFlow 团队将 Keras 作为 TensorFlow 的一个官方API加入到 TensorFlow 生态系统中。这意味着用户可以直接在 TensorFlow 中使用 Keras API 来构建和训练模型,而无需切换到其他库。Keras 成为 TensorFlow 的默认高级API,并且 TensorFlow 为 Keras 提供了后端支持,使得 Keras 模型可以在 TensorFlow 的计算图上运行。
在 TensorFlow 2.0 及以后的版本中,Keras 更是被进一步整合到 TensorFlow 中,成为其核心的一部分。TensorFlow 2.0 引入了 Eager Execution,这是一种命令式编程环境,使得 TensorFlow 的使用更加直观和易用,与 Keras 的设计理念相契合。因此,Keras API 成为 TensorFlow 2.0 推荐的模型构建方式,而 TensorFlow 提供了 Keras API 所需的所有功能和优化。
总结来说,Keras 是 TensorFlow 的一个高级API,它简化了神经网络的构建和训练过程,而 TensorFlow是运行环境,为Keras提供了所需的底层计算和硬件加速支持。两者的结合使得深度学习模型的开发变得更加高效和便捷。
Theano 是一个Python库,允许用户定义、优化和评估数学表达式,特别是涉及多维数组的表达式。Theano 最初是由蒙特利尔大学(University of Montreal)的 LISA 实验室开发的,它的名字是为了纪念希腊数学家泰阿恩(Theano),她是毕达哥拉斯的妻子,也是一位数学家。 Theano 的主要特点包括:
- 符号微分:Theano 可以自动计算复杂表达式的导数,这对于机器学习中的梯度下降算法非常重要。
- 高效的计算图优化:Theano 允许用户定义数学表达式,然后将其转换为一个计算图,并对这个图进行优化以提高效率。这种优化包括内存共享、避免冗余计算、以及将计算分布到不同的设备(如CPU和GPU)上。
- 与NumPy的紧密集成:Theano 与 NumPy 紧密集成,使得在 Theano 中定义的表达式可以很容易地与 NumPy 数组一起使用。
- GPU加速:Theano 支持在图形处理单元(GPU)上进行计算,这对于执行大规模数值计算非常有用,可以显著提高计算速度。 Theano 在深度学习的早期发展中发挥了重要作用,它是第一批能够有效利用GPU加速的Python库之一。然而,随着其他深度学习框架的发展,如 TensorFlow 和 PyTorch,Theano 的使用逐渐减少。2017年,Theano 的开发团队宣布停止更新 Theano,并将不再提供支持。尽管如此,Theano 仍然是深度学习历史中的一个重要里程碑,对后续框架的发展产生了深远影响。
参考:论文 生物神经元如何在动物大脑中协同 工作 A Logical Calculus of Ideas Immanent in Nervous Activity
第四章 业界和开源的AI项目
Grok
大模型可谓太火了。
TODO
马斯克的Grok大模型能玩了!嘴跟他本人一样损 - 掘金 (juejin.cn)
声音模拟
参考: 从声纹模型到语音合成:音频处理 AI 技术前沿 | 开源专题 No.45 - 掘金 (juejin.cn)
chatglm的部署
私有化实现及部署“chatgpt”对话机器人(三)--chatglm模型详解及部署 - 掘金 (juejin.cn)
第五章 坚定声音智能技术方向不动摇
声音智能技术的应用包括,数字人,人机语音交互,语音操作模块等等。
声音智能技术就像人的衣食住行一样,一定是未来的一个方向,一定会得到广泛的应用,这一块一定是毋庸置疑的。
这里需要说一个东西,我们要敏锐的观察市场。这个大方向是对的,但是要注意当下的风向。
有一个科学家说,21世纪是生物的世纪。但是很明显,现在还没有到来。
越是准确的预言越容易证伪,很多名人的话都容易成为笑话,更何况我们自己普通人的简单判断呢?所以要对判断保持开放,即认可这个大方向,但是也要结合实际。
把自己的技术和市场需求结合起来才能稳扎稳打。
所以,我有两个问题想问,现在的市场上,对于语音技术的需求在什么地方?第二个问题,我们能做出什么超越当下技术的可靠的可推广的语音技术呢?
算法工程师的职业发展之路
参考 探索大模型时代下的算法工程师前景与发展路径-腾讯云开发者社区-腾讯云 (tencent.com)
从算法到工程:技能升级的必要性
在大模型时代,算法工程师需要将重心从单纯的算法研究转向更加注重工程实践。这包括以下几个方面的技能升级:
- 分布式计算* *和 **** 高性能计算**:大模型需要在分布式环境下训练,算法工程师需要掌握分布式计算框架如TensorFlow、PyTorch等,以及优化计算性能的方法。
- 模型优化和部署:将大模型应用到实际场景中需要考虑模型大小、推理速度等问题,算法工程师需要学习模型剪枝、量化、加速等技术,以及云端和边缘设备上的模型部署方法。
- 数据管理* 和预处理*:大模型需要大量的数据进行训练,算法工程师需要了解数据的采集、清洗、标注等流程,以及数据预处理的方法,以保证数据质量和模型效果。
- 领域知识和应用场景:算法工程师需要深入了解所在领域的知识,将算法与实际应用场景相结合,以解决实际问题。
发展路径与职业规划
在大模型时代,算法工程师可以选择不同的发展路径和职业规划:
- 研究方向:算法工程师可以继续深耕在算法研究方向上,致力于大模型的创新与改进,探索更加高效的训练方法、模型结构等。
- 工程方向:算法工程师可以转向工程实践领域,专注于模型的部署、优化和应用,构建能够解决实际问题的AI系统。
- 跨界发展:大模型的应用涉及多个领域,算法工程师可以选择跨界发展,与领域专家合作,解决交叉学科中的挑战。
应对大模型时代:算法工程师的多元发展路径
随着人工智能技术的迅猛发展,大模型已成为当今人工智能领域的一大亮点和挑战。大模型不仅在自然语言处理、计算机视觉等领域取得了卓越成就,也为算法工程师提供了多种发展路径。在这篇博客中,我们将探讨算法工程师在大模型时代的前景和发展方向,并结合实际案例分析,深入理解每个方向的内涵。
路径一:深耕研究领域
在大模型时代,算法工程师仍然可以选择深耕研究领域,致力于模型的创新和改进。这需要算法工程师具备扎实的数学基础和创新能力,以探索新的模型结构、训练策略等。一个典型的案例是卷积神经网络(CNN)在计算机视觉领域的应用。CNN的提出在图像识别中取得了巨大成功,而算法工程师通过改进CNN的结构,如ResNet、Inception等,进一步提升了图像分类的性能。
路径二:工程实践与部署
随着大模型的广泛应用,算法工程师在工程实践和模型部署方面也有着广阔的发展空间。大模型需要高性能的硬件资源和合理的部署策略,以实现在实际应用中的效果。例如,谷歌的Bert模型在自然语言处理任务中表现出色,但其巨大的体积和计算需求也对部署提出了挑战。因此,算法工程师需要深入了解模型的优化、剪枝、量化等技术,以实现在有限资源下的高效部署。
路径三:跨界合作与解决复杂问题
大模型的应用不仅仅局限于某一领域,它们在多个领域都能发挥巨大作用。算法工程师可以选择跨界合作,与领域专家一起解决复杂问题。例如,在医疗领域,结合自然语言处理和图像处理技术,可以实现医疗影像的自动分析与诊断,从而提高诊断效率和准确率。
路径四:教育培训和技术普及
随着人工智能的普及,对于算法工程师来说,传播知识、培养新人同样具有重要意义。算法工程师可以选择投身于教育培训领域,培养更多的人才,推动人工智能技术的普及。此外,可以参与技术社区的建设,为广大开发者提供帮助和指导。
不断学习与更新知识
随着技术的迅速变化,算法工程师需要不断学习和更新知识。参加培训、学术研讨会、技术论坛等可以帮助算法工程师保持敏感的技术触觉,了解最新的技术动态和发展趋势。
第六章关于人工智能的趣事
AI无人商店背后,是上千个印度人通过摄像头看美国人买西蓝花?这个故事的背后,表明,人工智能有的时候还需要人工辅助,而且不是一点两点。