与查理杰拉德一起粉碎播客第 33 集:什么是机器学习?

已发表: 2022-03-10
快速总结↬在这一集中,我们谈论的是机器学习。 我们可以将它放在 Web 开发环境中的哪些任务? 德鲁麦克莱伦与专家查理杰拉德交谈以找出答案。

在这一集中,我们谈论的是机器学习。 我们可以将它放在 Web 开发环境中的哪些任务? 我与专家查理杰拉德交谈以找出答案。

显示注释

  • JavaScript 中的实用机器学习:面向 Web 开发人员的 TensorFlow.js
  • 查理在推特上
  • 查理的个人网站

每周更新

  • 依赖注入实用介绍
    由杰米·科克希尔撰写
  • 迈向无广告网络:使在线经济多样化
    弗雷德里克·奥布莱恩 (Frederick O'Brien) 撰写
  • Web 是否应该公开硬件功能?
    诺姆·罗森塔尔 (Noam Rosenthal) 撰写
  • 如何在 2021 年通过销售 Shopify 应用程序赚更多钱
    作者:苏珊娜·斯卡卡
  • Flutter 应用程序中的 GetX 包入门
    由开尔文·奥默雷肖内撰写

成绩单

查理杰拉德的照片 Drew McLellan:她是 Netlify 的高级前端开发人员、Web 技术方面的 Google Developer 专家和 Mozilla 技术发言人。 业余时间,她探索人机交互领域,并利用硬件、机器学习和创意编码构建交互原型。 她经常在会议上发表演讲并撰写博客文章来分享她学到的东西。 最近,他是 Apress 的 JavaScript 中的实用机器学习一书的作者。

Drew:所以我们知道她是一名前端专家,但她是否曾经使用她梦寐以求的金属文件越狱。 我的好朋友,请欢迎,查理杰拉德。 嗨查理。 你好吗?

查理杰拉德:我在砸。

Drew:我今天想和你谈谈机器学习,对于一个主要关注 Web 开发的浏览器端的播客来说,这似乎有点奇怪。 我倾向于认为机器学习是在大型数据中心或实验室中发生的事情,人们穿着白大褂。 这些天来,这绝对是一种流行语。 当我们说机器学习时,我们到底是什么意思?

查理:所以一般来说,标准定义是让计算机能够在不被告知要做什么的情况下生成预测。 希望当我们继续谈论它时这将是有意义的,但这是一种通用的对话定义。 你并没有真正告诉算法或模型去搜索某些东西。 他们通过您提供的数据进行学习,然后可以生成预测。

Drew:因此,您不必为某些情况专门编写代码,而是创建一个通用案例,让软件可以学习如何自己做这些事情?

查理:是的,没错。

德鲁:这听起来有点令人毛骨悚然。 这有点接近人工智能的一面。 您是否需要成为铁杆数学书呆子或数据科学家才能做到这一点? 或者是否有一些东西,比如已经建立的算法和你可以调用的东西来开始?

查理:是的。 幸运的是,您不需要成为铁杆数学书呆子或数据科学家。 否则,我绝对不会谈论这个。 但是有些算法已经被弄清楚了,并且已经可用的工具允许您使用这些算法,而不必自己从头开始编写所有内容。 因此,如果我们使用前端生态系统作为比较,您可以使用 Web API,如导航器,在您想要访问网络摄像头或麦克风时获取用户媒体。

查理:而且你不必知道这个 API 是如何在底层实现的。 重要的是,如果您愿意,您知道这个 API 的用途以及如何使用它。 然后稍后你可以去查看你最喜欢的浏览器的源代码,以了解它是如何工作的,但它实际上并没有什么用处。 如果您以后想编写自己的算法,它会很有用。 但老实说,您不太可能想要这样做。

德鲁:好的。 所以这有点像你可以编写 CSS 来在页面上定位元素的方式。 您不在乎浏览器实际上是如何做到的。 您只需编写一些 CSS,浏览器就会处理它。

查理:是的。 当你开始时,它大多是这样的。

德鲁:那很好。 这更像是我的数据科学水平。

查理:我也是。

Drew:那么您可以将机器学习用于解决哪些问题? 它对什么样的事情有好处?

查理:这首先取决于你想做什么,因为当你想构建一个特定的东西时,我建议首先考虑你想学习的问题类型,然后帮助你选择一个你喜欢的算法可以用来修复或找到解决您的问题的方法。 所以总的来说,我会首先考虑我要解决的问题类型,主要有三个。 我认为可能还有更多,但总的来说,对于我受过训练的内容和我读过的内容,主要提到了三个。

查理:如果你想让我进入这个,有监督学习、无监督学习和强化学习。 你也有这么多的监督,但老实说,我真的不太了解它,因为我已经能够用前三个项目来构建我的项目。

德鲁:有监督、无监督和强化,你说的是什么?

查理:是的,强化学习。

德鲁:好的。 那么什么是监督学习? 你能给我们举个例子来说明这意味着什么吗?

查理:监督学习,当你的数据集由特征和标签组成时,你将其提供给算法。 因此,如果我们举一个希望大多数人都能理解的例子,那就是,如果你有一所房子,你想卖掉它,你想弄清楚你要以什么价格卖掉你的房子或你的房子。车,实际上,顺便说一句,这将是同一件事。 并且你会使用相同环境或相同类型房屋的数据集,并且知道它们在市场上的价格,你将能够使用自己房屋的特征; 那么有多少房间,有花园,在哪个社区? 诸如此类的事情。

查理:这些是特征,标签是价格,使用你周围的所有这些房屋数据集,你可以使用机器学习算法来学习房屋特征之间的相关性和市场上的价格,然后得到你的房子的特点,并能够从中产生价格。 所以最重要的是在监督学习中,你有一堆特征和一个标签,所以你实际上能够在两者之间画出相关性。

德鲁:你会,在这个例子中,你会向模型提供大量关于房屋的数据,你知道它们的价格,然后你就会知道它们的所有这些特征。 说卧室,你有什么,比如平方英尺,我猜位置可能是另一种考虑因素?

查理:是的。 因此,机器学习的问题之一是您可以拥有很多功能,而其中一些功能实际上也不会像其他功能那样高效。 因此,例如,您可能拥有房屋的颜色,实际上可能与价格没有相关性,但您可以提供一堆特征,模型本身会发现两者之间的相关性。 然后,您可以根据需要调整数据集并删除颜色,或者您意识到花园的大小无关紧要或类似的事情。

查理:所以一般来说,即使你将数据集提供给模型,第一次也不会有完美的预测。 通常你调整一些不同的东西,你会看到。 您可以对其进行微调,直到得出您认为非常准确的预测。

Drew:然后,一旦创建了该模型,或者说您使用来自一个城市的数据创建了它,您是否可以将其获取并提供给它……您是否需要提供来自另一个城市的数据? 培训完成后,您是否能够将其拾取并在其他地方使用,或者它是否特定于该数据集或如何工作?

查理:我认为这将是特定于数据集的。 所以这意味着您可以创建另一个具有相同格式的数据集。 如果您有一个包含不同列的 Excel 电子表格,您将能够保留相同的标签和特征,但您必须将其替换为该城市的值。 但总的来说,这意味着收集数据集也可能需要很多时间,但是如果你已经知道你为巴黎市做了什么,并且你的数据集的结构是相同的,但是您替换值,它会更快一些,您可以重新生成模型。

查理:你不应该重复使用相同的模型,如果你的数据不同,例如,巴黎的房屋价格与澳大利亚的一个小城市不同。 所以你不会想要有错误的数据,因为你的数据集的核心一开始并不完全相同。

德鲁:我们谈论了很多关于机器学习的模型。 所以模型有点像数据集所有分析的最终结果。 然后它被用来进行后续的预测。 模型是这样的,是吗?

查理:是的,就是这样。 这是一个模型,所以它有点像一个函数,你将向它提供以前从未见过的新输入,但基于它在训练步骤中学到的知识。 它将能够输出预测。

德鲁:所以监督学习,然后它根据特征标签制作这个预测模型。 什么是无监督学习?

查理:所以无监督是一个有点相同的概念,但是你去掉了标签。 所以在这种情况下,你可以认为我们卖房子的问题,不会是真正的无监督学习问题,因为如果你只知道你周围房子的特征,但你没有价格作为标签,你无法真正预测价格。 它甚至不知道价格是多少。

查理:所以当你有一组数据并且你只有关于它的特征时,无监督更多。 您可以一起生成更多趋势或事物集群。 如果你想要一个特定的输出,如果你有一个特定的问题,比如“这个价格是多少?”,你就不会使用无监督学习。 这并不是无监督的一个很好的用途,但更重要的是,如果你想将实体聚集在一起,它可能是人或类似的东西。

查理:所以通常情况下,一个用例是亚马逊推荐或 Spotify 推荐之类的推荐,比如,“像你这样的人也会听这个”,而且更多的是在这种情况下,功能的位置是……嗯,他们有关于你的数据,所以他们知道你听什么,你通常在哪个国家,或者你一天听多少次? 因此,使用这些关于人的特征,他们可以将你放在同一个集群或同类型的听众,或者在亚马逊上购买某些东西的同类型的人中。 使用这种无监督学习,他们可以根据像你这样的人知道向你做广告或推荐你应该听的内容。 所以更多的是这样的问题。

德鲁:好的,所以这对我现在作为一名网络开发人员来说更有意义,因为我们讨论过的这些用途,房屋定价和推荐以及提供广告和东西,在一天结束时,这些是我们必须处理的各种事情,以及我们可能希望将其放入网站或产品中的功能,或者您拥有的东西。 因此,我们得到了基于我们希望预测的主题的不同类型的学习。 还有其他类型的应用程序我们也可以使用它吗? 有没有人们创造的可以使用这个的好例子?

查理:是的。 有很多例子。 这就是为什么,当我谈到预测房子的价格时,也许这与你无关。 也许这并不那么令人兴奋,但实际上你可以做的还有很多。 周围确实有很好的例子。 我认为我看到的第一个是围绕动态生成的图像艺术文本。 所以当然,当您将图像添加到站点时,您可以自己做一些事情。

查理:但是,如果你的网站实际上有大量图像,而不是手动操作,你可以将每张图像输入机器学习算法,它会生成一个与该图像有关的艺术文本,并且也许唯一的人工步骤是验证这是否正确,但它确实可以让您将时间集中在构建应用程序上。

查理:你仍然可以通过为图像添加艺术文本来使你的网站易于访问,但它会是由机器生成的。 这是我开始研究时看到的示例之一,但您也有一个过滤对工作内容不安全的原型。 而且我认为这在 Chrome 扩展程序中实际上会非常好,您可以拥有一个 Chrome 扩展程序,每次打开网页时,您只需检查页面上的内容是否是安全的内容。

查理:例如,如果你有孩子使用你的笔记本电脑或类似的东西,那么你可以隐藏图像或用熊猫替换这些图像,如果你愿意的话。 但在这种应用程序中,您可以使用机器学习自动为您做事,这样您就不必担心某些任务,或者您可以只用脑力做其他事情。

查理:但还有更高级的手势识别示例,使用与亚马逊 Alexa 通信的网络摄像头和语音识别以及所有这些东西。 因此,您可以真正将许多不同的技术与语音、网络摄像头和机器学习结合在一起,以实现识别并能够以一种新的方式与不同的技术进行交互。 所以它真的很有趣。

Drew:这很有趣,因为我们已经研究过分析数据模型本身,现在我们正在考虑查看图像内容并使用机器学习分析图像内容,这非常有趣。 我想这就是 Facebook 的功能,如果有人发布了一张他们认为可能是血腥或显示受伤或其他东西的照片,并且它会模糊它,然后你只需点击即可显示它。 显然,Facebook 不能让版主团队查看上传的每张图片。

查理:我希望他们不会。

德鲁:那将是一项无止境的任务。

查理:那也不是什么好工作。

Drew:我曾经在一个免费的广告网站上工作,人们可以在那里发布广告。 这其中涉及到很多节制,即使是我,作为 Web 开发人员,也必须参与其中,只是通过,看着所有这些图像说,“是的,不,是的,不。”

查理:我也做了一点。 我希望当时有机器学习,只是一个小实用工具来为我做这件事,现在它就在那里。 所以这很酷。

德鲁:是的,这真的很棒。 考虑来自网络摄像头的实时输入并能够对其进行实时分析是非常令人兴奋的,这样您就可以进行基于手势的交互。 就是它…

查理:是的,所以它的核心实际上使用了更多的图像分类,因为你的网络摄像头,图像是一组像素,但是当你做出某些手势时,你可以训练一个模型来识别你的右手举起,也许你会像这样控制鼠标,或者它会查看你的手和屏幕的坐标,然后你会跟随鼠标。 你真的可以为所欲为。 你可能有颜色识别。

查理:你可以做一些非常有趣的事情。 一个我构建的原型,在某些时候我有点放弃了,但我构建了一点……我希望它是一个 Chrome 扩展,但是没有用。 我用 Electron 构建了一个小桌面应用程序。 同样在 JavaScript 中,我只需倾斜我的头就可以浏览网页。 所以它会认识到,当我低下头时,它会向下滚动,当我向上时,它会向上滚动。 正是这些小实验,我在想,“好吧,如果我能把它变成一个 Chrome 扩展程序,它可能对某些人有用。”

查理:即使你只是在电脑前吃饭,看新闻,我不希望我的键盘弄脏,我也可以歪着头,但也希望,为了方便,可以实际上可以帮助人们浏览某些网页或类似的东西。 有很多可用的工具,它是关于你可以想出观察周围情况的想法,以及如何使用机器学习解决其中的一些问题?

Drew:对于机器学习,我们经常会想到语言,Python。 我认为这就是很多发展似乎首先发生的地方。 但是作为 Web 开发人员,我们显然更习惯于使用 JavaScript。 机器学习是我们可以实际期望做的事情吗? 我的意思是有趣的小例子是一回事,但它对 JavaScript 的实际工作真的有用吗?

查理:嗯,我的意思是,我想是的,但是我知道我所做的大部分事情都是原型,但我认为这取决于你在工作中所处的情况。 作为一名开发人员,有多种方法可以在您的日常工作中实施机器学习。 但是我真正喜欢 JavaScript 的一点是,如果你已经是一名前端开发人员,那么你不必去学习新的生态系统或一套新的工具或一种新的语法、一种新的语言。 你已经在你每天工作的环境中了。

查理:通常当你学习这类东西时,你必须从自己的时间开始,如果这不是你的日常工作,每个人的时间都很宝贵,而你没有那么多时间。 因此,如果您可以消除一些障碍并留在您所知道的同一个生态系统中,那么我认为这非常好,但您也可以开始...... JavaScript 的力量在于,您可以从构建一个小原型开始,让人们相信也许有一个想法需要调查,并且通过能够在 JavaScript 中快速启动某些东西,您可以验证您的想法是否正确。

查理:那么要么你可以得到领导层的支持,花更多的时间或更多的钱,或者如果你想用 Python 构建它,你可以把它交给 Python 开发人员。 但对我来说,这种快速验证想法的能力非常重要。 特别是,如果你为一家初创公司工作,并且一切进展顺利,并且你能够证明这是值得研究的东西,我认为这非常重要。

查理:还有一个事实,那就是确实有一个很大的工具生态系统,并且有越来越多的机器学习框架和应用程序。 在 JavaScript 中,我们不仅可以在网页上添加机器学习。 正如我之前所说,您可以使用 Electron 构建 Chrome 扩展程序和桌面应用程序,使用 React Native 构建移动应用程序,以及使用 Johnny-Five 等框架构建硬件和物联网。

查理:所以使用你已经知道的语言,你实际上可以访问一个由不同平台组成的巨大生态系统,你可以在这些平台上运行相同的实验。 我认为,对我来说,这非常了不起。 这就是我看到在 JavaScript 中进行机器学习的真正力量的地方。 随着它变得更好,也许你可以真正将它集成到我们每天构建的应用程序中。

Drew: JavaScript 无处不在,不是吗?

查理:是的。

德鲁:无论好坏,它无处不在。 有谁会想过? 这听起来不错,但听起来也需要做很多工作。 我想到了数据集和事情,你到底是怎么开始做这些任务的?

Charlie:目前,至少对于 TensorFlow.JS,您可以使用该框架做三件事。 假设最简单的方法是导入现有的预训练模型。 所以其中有一些,不同的模型已经用不同的数据集进行了训练,我建议从这个开始,因为你可以学习如何实际使用框架本身的真正基础知识,以及你能做什么与这些模型。

查理:所以你有一些用不同图像训练过的图像识别模型。 其中一些更适合对象识别。 其中一些更适合人们的识别,并且通过了解要使用的模型,我们可以在该模型的约束下自由地构建您想要的任何东西。

查理:但我认为,这是一个很好的开始方式。 我仍然在我的很多实验中使用预训练模型,因为它也是,如果它已经存在,你为什么要重新发明轮子? 让我们使用提供的工具。 然后当你想更进一步时,你可以做所谓的迁移学习,当你重新训练一个重要的模型时。 因此,您仍然使用其中一种预训练模型,但随后您有机会使用自己的样本重新训练它。

查理:例如,如果你想在有不同人的情况下使用图像分类,那么你可能想做手势分类。 例如,如果你的模型是由那些总是右手举起的人训练的,我不知道,但是对于你的应用程序,你想要左手,你可以用你的左手样本重新训练那个模型手,然后你会得到一个已经训练有素的模型来识别右手,但是你会添加你自己的样本,你可以在浏览器中很快地重新训练它,这取决于你给它的新输入数据的数量,这需要一些时间,但在几秒钟内,您就有了一个经过重新训练的模型,该模型非常擅长识别这两个手势,然后您可以在您的应用程序中使用这些手势。

查理:所以这通常是第二步。 然后第三步稍微复杂一点,就是在浏览器中进行所有操作。 因此,您从头开始编写自己的模型,然后在浏览器中对其进行训练,然后您就可以真正训练、运行和生成模型,一切都在浏览器中进行。 但总的来说,我见过的唯一应用是构建可视化。 当您想要可视化正在训练的模型的过程以及它所采取的步骤数、所花费的时间,并且您可以看到准确度上升或下降,具体取决于您选择的特征和您调整的参数.

Charlie:所以我并没有真正使用过那个,因为我还没有找到我想要构建的应用程序,但是仅使用预训练模型或使用我自己的样本重新训练它的两个第一步是我个人见过的地方。 我玩得很开心。

Drew:所以通常情况下是预先创建模型,就像离线一样,然后浏览器使用该训练好的模型,或者可能会添加一点点,它会进行一点点再训练,但是通常,该模型将在用户浏览器中投入使用之前建立吗?

查理:总的来说,是的。 那么你绝对可以创建自己的模型。 如果你这样做,我不建议在浏览器中训练它,但你也可以在 NodeJS 中进行训练。 如果你知道,一点点 NodeJS。 我确实创建了自己的模型,但我通常在 NodeJS 中运行它,因为它的性能更高一些。 然后我使用我在浏览器中创建的生成模型。

Drew:有哪些工具可以用 JavaScript 做到这一点? 您提到了 TensorFlow JS,但那是什么,那在哪里? 是来自谷歌吗?

查理:是的。 起初谷歌在 Python 中使用了 TensorFlow 工具,而现在,在过去,可能是几年,或者更多时间,他们制作了 JavaScript 版本,所以它倾向于与 JS 一起使用。 但也有 ML5 JS,它在上面有点抽象。 因此,如果您有点困惑,或者如果 TensorFlow JS 对于他们在文档中使用的一些词汇表看起来有点吓人,您可以使用具有大部分相同功能的 ML5 JS,但假设 API 或语法是对初学者更友好一点。

查理:你可以从 ML5 开始,看看你是否喜欢机器学习,或者你是否考虑过一个很酷的应用程序,然后如果你在 ML5 中有一些障碍或者框架没有你想做的某些事情,你如果需要,可以继续使用 TensorFlow JS。 如果你真的对真正编写自己的代码不感兴趣,而只是想使用已经存在的工具,那么亚马逊、谷歌和微软也提供了一些 API 来进行图像识别或语音识别。 因此,如果您对查看它可以做什么更感兴趣,但又不想花太多时间编写代码,您可以 ping 一些 API 并尝试他们的一些工具。

德鲁:这很有趣。 因此,您可以使用浏览器从网络摄像头或麦克风或您拥有的其他设备中获取输入,然后将其发送给亚马逊、微软或其他任何公司,然后让他们完成艰苦的工作?

查理:是的。

德鲁:然后你就会从结果中受益。

查理:没错。

德鲁:这听起来像是一个很好的、诱人的方式来开始这些想法。 听起来不错,但是我们可以在前端应用它来解决哪些问题? 我们已经讨论了一些小事情,但是我们还有其他方法可以使用它吗?

查理:有很多方法。 如果我从图像分类开始,是的,你可以。 您可以使用来自网络或手机网络摄像头的图像。 如果你只是在手机上使用你的网站,你可以拍照和识别物体,然后……有黄色的垃圾桶,绿色的,这取决于国家。 它们有不同的颜色,但有时我不太擅长知道实际扔东西的地方,所以你可以构建这样的小工具,live 可以识别你面前的两个物体,然后对它们进行分类,你可以构建某些东西,比如这。

查理:否则,你有文本分类,今年早些时候,我使用其中一个 TensorFlow GS 模型来查看写在 GitHub 问题和 GitHub PRs 上的评论,然后分类并说,“嘿,如果它是有毒评论,那么你有一个小机器人说,“嘿,也许你不应该写这个,”或者,“小心,它有点有毒。 我们希望这是一个安全的空间。””所以你可以使用这样的文本分类。

查理:如果你愿意的话,有声音分类,当苹果发布他们的新手表 OS 时,他们有一些东西可以识别流水的声音,告诉人们在 COVID 大流行中洗手 20 秒,但你可以做到在 JavaScript 中也是如此。 真正有趣的是,我正在观看一些视频,我想,“哦,我知道如何在 JavaScript 中做到这一点。”

查理:我做了一个小原型。 我不知道它是否可以在 Apple Watch 上运行。 可能是。 我没有,但我知道它可以在我的手机和笔记本电脑上运行。 然后这也可以为其他人开始一些想法,我的一个朋友 Ramon Huidobro 在 Twitter 上@hola_soy_milk。 今年他参加了很多在线会议。 他的问题之一是,当他为某人鼓掌时,他没有时间在聊天中添加拍手表情符号。 而他想要做的是听他拍手的声音,这会在聊天中自动发送拍手表情符号。

查理:如果你想要一个在你的日常工作中真正更有用的应用程序,那就是这样的小事,那就是预测预取。 这也是在前端使用机器学习来查看您网站的分析。 因此,通常会在哪些页面之后查看哪些页面,以及诸如此类的事情。 您可以根据最有可能访问的页面提前预取资源。 这是我这一年来一直想要研究的东西,但我没有时间,但这可以让你真正提高页面的性能和用户体验。 而且您不需要请求不需要的资源,因此可以真正改进,这也是机器学习的应用。

查理:所以你可以做一些有趣的事情,或者你可以做更多有用的事情,但是没有错误的应用程序,可能有错误的应用程序。 我收回它,但我只是说,如果你真的开始了,从一些有趣的事情开始并没有错,然后我可以提出一些你可以在工作中做的事情的想法好吧。

德鲁:我想这里真正有用的是知道这些事情是可能的。 实际上只是创造性的解决问题的方法,我们可以自己做。 传统上,我们通过审核用户提交的内容来构建东西,这相当原始,我们基本上必须让人类查看内​​容并做出决定。 但是在那个例子中,通过机器学习,我们可以把更多的东西交给我们,然后让人类看看边缘情况,例如,没有令人信服的匹配的事情。

德鲁:当然会这样,开发那个东西并让它到位需要一点时间,但是你会想到不让人类手动检查东西的节省。 随着技术的进步,您认为这将在未来用于什么用途?

查理:对我来说,也许在未来,我认为随着模型的加载变得更小,它们的性能更高,我们可能会改进它们训练的数据集。 我希望能够看到更有帮助的工具。 我的意思是,就个人而言,我对可以在微控制器上运行以构建东西的微型机器学习模型感兴趣。 但如果我们更多地停留在前端世界,我希望可能会有更好的语音识别,因为我觉得我们已经习惯了用触控板或键盘来浏览网页,但目前,仍然有语音识别,但它并不总是非常准确,或者它对口音不准确,例如。 而且我希望随着我们开发更好的模型,较小的人不会害怕将其添加到他们的网站,因为它不会严重影响性能。

查理:我对在预测预取等方面使用机器学习很感兴趣,这样我们就可以构建更智能的网站,从而改善一系列体验,因为对于用户来说,这会更好,因为页面加载速度更快,因此性能一般您的网站,它是更好的。 但也让我们说,如果我们考虑可持续性,不请求无用的资源也有助于减少您网站的碳足迹。 但是还有机器学习模型的碳足迹。 那不是很好。 所以也许我们不要谈论这个。 我想,对于未来,我只是希望拥有性能更高或更小的模型,以便人们更有可能尝试一下,因为让人们进入这个领域的障碍会更少,但让我们看看。

Drew:在开始机器学习项目之前,我们是否应该了解已知的限制和约束?

查理:是的。 有。 我认为,无论你是用 JavaScript 还是 Python 来做,都有限制。 我认为,如果您确实想要构建一些非常定制的东西,并且没有预先训练的模型,那么限制之一是您可能需要大量数据,而并非每个人都有。 So if you're doing something on your own as a side project, and you can't find the data set, it would actually take you quite a long time to get one that would allow you to generate good predictions. You can build a small data set, but you will not be able to push it to production or something if you don't actually have a data set that's consistent enough. So I think the amount of data that you need, training the models can take a lot of time.

Charlie: That depends on the amount of data that you feed it, but depending on the application that you want to will build it with, you have to be aware that it can take a lot of time. I remember when I got started and I was doing it in Python and I wanted to… I forgot what I wanted to do, but my model was running for, it was training for eight hours. And at the end it told me that it failed because of something. And I was like, “You're telling me that at the end, after eight hours,” so it can be a bit frustrating and it can still be experimental and you have to be comfortable with it not being a pure science, not everything is always accurate.

Charlie: At the moment, as some of the models are still, they can be a few megabytes, if you are building something that you know, is most likely going to be seen on a mobile screen, you might want to take into consideration that, well, you don't want to load all that data over 4G network. You might want to warn people that they should be on Wi-Fi or the battery use, or the type of phones can't really handle all of this as well. And then more seriously in terms of liability, you do have to understand why your model predicted certain things. And that can be difficult because the model is a black box. It's a function that you don't really know what's inside. You know what it predicted and based on what you're building, if it makes certain decisions about, I don't know, who gets a loan or who goes to prison, based on whatever, you want to be able to explain how you got to that decision.

Charlie: If you decided to use machine learning to kind of abstract some of the work, so it wouldn't be done by people. That can be quite dangerous, so you have to know what you're doing, and in the end, just remember that it's not perfect. I think people sometimes assume that because we talk about artificial intelligence is just as smart as people, but no, it's still computers. It's still data that is given to them and they make up some predictions and somehow we just trust it, which is scary. But yeah, that's some of the limitations.

德鲁:是的。 I guess it may seem like it's intelligent, but it is still artificial. There've been some quite high profile cases in recent times particularly around some of the machine learning stuff with image recognition that have raised issues of bias in machine learning, for example, a model only detecting humans if they have light skin. Are there ethical considerations that we should be making here?

Charlie: To me, that sounds like a really interesting side of machine learning. And that's also why, before I was saying that, remember that it's not perfect. Sometimes I feel like people think that the machine just happens to be right and know all the things by itself, but it's still something that we program. And when an algorithm products or generates a biased result, the algorithm just generated things based on the data that it was given before. So an algorithm itself or a model is not going to know the difference in society between light-skinned people or dark-skinned people. It doesn't know and it doesn't care. The only thing that it knows is that I got given pictures of certain people and I'm just going to generate based on what I know.

Charlie: And the data set that is given to the algorithm is in general generated by us, by people. Maybe it's not the developer using the model, but at some point somebody put together a data set. And I think it's important to remember that we are responsible for making sure that the predictions generated are as fair as possible and as unbiased as possible. And that creates interesting questions then, because then you can go into, “Well, what is fair for people?” or if we think about my example of the GitHub action that I created to look at toxic comments, well, maybe what I think is toxic is not the same thing as what other people think is toxic.

Charlie: It's interesting. There's a really interesting collection of videos by MIT media lab around the ethics and governance of artificial intelligence, and I find that fascinating because it's not about telling people, “Oh, you're a bad person because you used in algorithm that's biased,” or, “You're a bad person because you produced a model that's biased.” Its more about raising certain questions and helping you realize, “Well, actually, maybe I could be better,” because that surface that, “Yes, I forgot to add diverse people to my data set. Let me fix that.” It's not really about say, “Let's not use that model ever again.” Just retrain it. Realize that, “Oh, I forgot this. I can retrain it and we can make it better.” And that's something that I definitely think is interesting.

Charlie: And you have companies really trying to improve on that. When the issue of Google who was translating certain neutral languages into gendered languages, and all of a sudden engineer was male and cook was female. Now they know they've really reworked on that and it's a lot more unbiased and they use the 'they' pronoun as well. They also really try to make it better, but then you have also weird stuff where I think IBM had created a data set called Diversity in Faces, that was supposed to be one of the very few that I said that actually had a diverse spectrum of people. But when I tried to find it to use it, it's not available anymore. So I'm like, “Oh, you had this good initiative. You try to do better than a lot of other people, and now people are going to actually use it.” I don't know, but I think the question is really fascinating because he can really help us improve. And then we improve the tool as well that we're using.

Drew: I guess it pays just to be really careful to be balanced and be diverse when selecting data for training models. I guess that's what it comes down to, isn't it?

Charlie: Yeah. Well, I mean, you're building a tool for the public, in general, right? If it's a tool that everybody can use, so it should reflect everybody really, or you should be really clear and say, “This tool can only be used by these people because the model was trained that way, but it's not really what we should do.” I understand that sometimes it if you've never thought about it, it can be I don't know, you can see it as a burden. I hate that people would think of it that way, but it's also, if you spent all this time, maybe writing your own algorithm or generating your own model and doing all of this work, you can't tell me that finding a diverse data set is the hardest part. I don't think it would be. So I'm hopeful, and I think as more people raise concerns about this, and I think people are watching this space, which is really good because if companies don't do it, they'll do it if we tell them that it's not right. And if you want the adoption of machine learning models, you have to make sure that everybody can use them.

Drew: Of the various tools that are available for doing machine learning in JavaScript, you've worked a lot with TensorFlow JS and you've written a book about it. Tell us about your book.

Charlie: Yes, I did. I did write a book this year about TensorFlow JS. So to help JavaScript developers learn more about machine learning and understand it better. And I think the main goal of this book was to help people dive into machine learning, but making it less scary, because I know that at first I thought about machine learning as this big thing, completely different from the web development that I would never understand anything about. I didn't think that I would have to write my own algorithms and really understand math. And as I've dived into this over the past two and a half years, I realized that it's not really like that. And I was hoping that writing this book could help people realize as well that they can do it and what can be done.

Charlie: And there's also a few projects that you can really put in practice what you're learning, but it was really aimed at people who haven't really looked into ML yet, or who just are curious to learn more. I'm not really diving into the algorithms like the source code of the algorithms, but it's really more telling people, trying to understand what an algorithm does and which one to use and for what. A bit of what we just talked about, but it's explaining contents in a clear way, so hopefully it's less scary and people want to hopefully dive a bit more into it.

Drew: So it's called Practical Machine Learning In JavaScript and is available from Apress, and we'll link it up in the show notes. So I've been learning all about machine learning today. What have you been learning about lately, Charlie?

Charlie: Let's say a thing that I'm diving into that is related to machine learning or I will use machine learning with it, but it's digital signal processing that I want to use with machine learning. As we've talked about the fact that machine learning needs a lot of data, if you want to build your own models, sometimes you have to filter your data to actually get the right prediction. And if we think about it, let's think about noise canceling headphones. In your day-to-day life, you have a lot of noise around you. Let's say you're trying to watch a video on the train and there's people talking around you, and there's a sound of the train. And what you want to focus on is the sound of the video.

Charlie: With digital signal processing, that would be a little bit like your noise canceling headphones, where there's some noise around that you don't care about. So there's some data that you don't want to listen to, and the noise canceling headphones allow you to focus on the sound coming from the video on your phone, so that you can really truly listen and focus on that. What I'm doing with digital signal processing is that I have a bunch of data from a piece of hardware, like an Arduino, but I know that there's a lot of it that I might not care about. I want to filter out the things that I don't care about, so that then I can feed that to a model and get better predictions about gestures or things like that. So you have your data signal that you can either transform or filter.

Charlie: It's like when you use the web API to get sound from your microphone, you can either see the arrays of numbers on your dev tools, or you can transform it into a spectrogram to see the picture of the sound. And that's a little bit of that. To have a better prediction for gestures based on hardware data, I can transform that signal. I've been wanting to do this for a couple of years, but it's something that I know nothing about. It takes time to learn, but now that I know a bit more about the machine learning side, I can learn the digital processing side and I'm getting there. I like this moment where I'm like, “Oh, I start to get it because I spent all this time on it.” And yeah, that's, that's really interesting. I'm going to have you going a bit.

Drew: Charlie you're such a nerd. If you dear listener would like to hear more from Charlie, you can find her on Twitter, where she's @devdevcharlie and her personal website includes links to lots of our experiments and projects, and it's really worth checking out at charliegerard.dev. Her book Practical Machine Learning In JavaScript is available now, and we'll link to that in the show notes. 感谢您今天加入我们。 Charlie, did you have any parting words?

查理:记得找点乐子。 今天我们谈了很多有趣的东西,然后是实用的东西,但如果你愿意研究这个,记得要玩得开心,不管你决定建造什么。