TensorFlow.js术语表及使用例子
基于JavaScript深度学习整理
术语表
GrapModel
- 在TensorFlow.js中,GraphModel指从Python版TensorFlow转移到JavaScript生态的模型。GraphModel可以利用TensorFlow内部的性能优化机制,例如Grappler的计算优化和运算融合优化
epsilon贪心策略(epsilon-greedy policy)
- 强化学习中的一种行为选择方法。它能够将智能体在随机探索行为和最强行为间的平衡性参数化。epsilon的值被约束在0~1范围。它的值越大,智能体就越倾向于选择随机行为。
ImageNet数据集
- 一个大型的、公开的、有标签彩色图像数据集。对于计算机视觉相关的深度神经网络,它是一个重要的训练集和基准。ImageNet数据集对于深度学习革命的发端至关重要
Inception模型
- 一类有大量层且结构复杂的深度卷积神经网络
Keras
- 深度学习生态中一个著名的库。Keras是一个基于Python编程语言的库。TensorFlow.js的高阶API,正是基于Keras构建的,同时也与Keras兼容。
LayersModel
- 用TensorFlow.js提供的类Keras的高阶API构建的模型。它可以加载自转换后的(python版)Keras模型。LayersModel同时支持推断(通过predict()方法)和训练(通过fit()方法和fitDataset()方法)
MobileNet模型
- 一个预训练的深度卷积神经网络,一般是基于ImageNet图像分类数据集训练而成的,并可用于迁移学习。和其他类似的卷积神经网络相比,它较为轻量,推断时消耗的算力也较少,因此它更适合用TensorFlow.js在资源受限的浏览器环境中运行。
multi-hot编码
- 将句子中的单词(或者更笼统地说,将序列中的各项)表示成向量的方法。在这种表示中,和单词对应的元素会被设为1,其他的元素则会被设为0.可以将multi-hot编码看作one-hot编码的泛化形式。它会舍弃原句中
one-hot编码
- 一种将类别数据编码成长度为N的向量的方法。向量中除了和实际类别对应的索引外,其他所有位置都是0
Q网格(Q-network)
- Q网络是强化学习中,一种可以根据当前状态的观察,预测所有可能行为的Q值的神经网络。Q学习算法的本质是利用智能体的经验数据训练Q网络。
ResNet模型
- 一种计算机视觉领域广泛使用的卷积网络,其特色是采用了残差连接,即可以跳过部分层的连接方式。
TensorBoard工具
- 一种为Python版TensorFlow设计的检测和可视化工具。它使用户可以在浏览器中可视化模型的结构和训练性能。TensorFlow.js可以生成与TensorBoard数据格式兼容的训练日志
TensorFlow
- 一个开源的可以加速机器学习的Python库,主要侧重于深度神经网络。TensorFlow.js的API正是以它的API为蓝图设计的。
visor界面(visor surface)
贝尔曼方程
- 贝尔曼方程是深度Q学习这类强化学习算法的理论基础
标签(label)
- 对于当前的任务,输入样例对应的预期答案。标签可以是布尔值(是或否)、数字、字符串文本、诸多可能类别中的一种、数值序列或其他更复杂的数据类型。在监督式学习中,模型的目标是尽可能生成和标签匹配的输出
策略梯度(policy gradient)
- 一种强化学习算法。它会计算并利用所选行为的某些值(例如对数)关于策略网络的权重梯度,使策略网络逐渐改进行为决策
层(layer)
- 在神经网络的语境下,层是对数据表示的转换。它的作用和数学函数类似:对于给定的输入,生成一个输出。层的状态记录在它的权重中。神经网络可以在训练中修改这些权重
模型(model)
- 在机器学习和深度学习中,模型是一种能够通过一系列数学运算,将输入数据(例如图像)转换成预期输出(例如图像对应的文本标注)的对象。模型的参数(即权重)在训练期间是可调的
模型部署(Model deployment)
- 封装训练好的模型,使其可以放到想要的环境中来做预测的过程。和其他软件系统提供的“发布到生成环境”功能类似,部署是让用户“真正”使用模型的方法。
迁移学习
- 它指将之前为某个任务训练的机器学习模型,用(和原训练集的规模相比,相对)少量的新数据为新任务进行重新训练,再用于新任务的推断的实践
张量(tensor)
- 一种用于储存数据元素(通常是数字)的数据结构。可以将张量看作一种n维网格,网格中的每个位置都正好存一个元素。维度的数量,以及每个维度的尺寸叫作张量的形状(shape)。例如,3x4的矩阵就是一个形状为[3,4]的张量。长度为10的向量就是一个形状为[10]的一维张量。每个张量实例只能储存一类元素。张量之所以采用这种设计是为了方便且高效地实现深度学习中必备的常见运算,例如矩阵的点积运算
- 张量能够将数据结构化,从而实现高效并行计算
样例(example)
- 在机器学习的语境中,样例是一个模型的输入数据的实例(例如,和机器视觉模型所需输入尺寸匹配的某个图像数据)。机器学习模型会针对样例输出预测结果(例如图像的标签)
维度(dimension)
- 在张量的语境中,维度和轴是同义词。详情参见轴的定义
伪样例(pseudo exmaple)
- 基于训练样例的已知变种形态的额外样例。它们可以用于辅助训练的数据。例如,可以在MNIST数据集的基础上,给数据集中的数字添加轻微的旋转和偏斜。这些变化并不会改变图像的标签。
无监督式学习
- 使用非标签数据的机器学习范式。它和监督式学习相反,因为后者使用的是有标签数据。无监督式学习的例子包括聚类(发现数据集样例中的独特子集)和异常检测(判断给定的样例喝训练集中的样例是否足够不同)
向量化
- 将非数值数据转换成数值数组表示(例如向量)的过程。例如,文本向量化将字符、单词或句子转换成向量表示。
学习率
- 在梯度下降的过程中,模型的权重会被更新来减少损失。权重的实际变化不仅关于损失梯度的函数,而且还关于学习率参数的函数。在标准的梯度下降算法中,权重的更新幅度是通过将梯度和学习率相乘得到的,其中后者一般是一个较小的、值为正的常数。在TensorFlow.js中,'sgd’优化器的默认学习率是0.01
轴(axis,复数axes)
- 在TensorFlow.js的语境中,轴指能够对张量进行索引的单个独立的键。例如,三阶张量。可以用与三个轴对应的三个整数定位到三阶张量中的一个元素,张量的轴又叫作维度。
- 计算机科学中研究如何用计算机处理和理解自然语言(尤其是文本和语言)的子领域。深度学习的很多应用都在自然语言处理领域
神经网络
- 一类受生物神经系统中的层结构启发的机器学习模型。神经网络中的层会对输入数据的表示进行多步骤、可分离的表示转换。
深度神经网络
- 拥有大量(从两个到甚至上千个)层的神经网络
深度学习
- 对深度神经网络的研究与应用(即用大量堆叠的表示转换解决机器学习问题)
生成式对抗网络
- 生成式模型的一种,由两个部分组成:判别器和生成器。判别器通过训练可以分辨来自训练集的真实数据和伪造数据。生成器通过训练可以生成让判别器输出高真实度值的假样例(即“骗过”判别器,让它误以为假样例是真的)。通过适当的训练,生成器就可以学会生成高度逼真的假样例
时频谱
- 一种对一维时间信号(例如音频)的类图像二维表示。时频谱有两个维度:时间和频率。
受试者操作特征曲线
- 一种二分类器的真正例率和假正例率间取舍的可视化方式。该曲线的名称源自早期的雷达技术。参见曲线下面积(AUC)
特征
机器学习模型的输入数据的一个维度。特征可以是下列任何形式之一:
- 数值
- 来自某个开集的字符串
- 某个类别信息
- 一维或多维的数组
- 其他类别的信息
一个输入样例可以包含一个或多个特征。
特征工程
- 将输入数据中的原特征转换为更适用于解决当前机器学习问题的表示的过程。在深度学习革命之前,特征工程一般是由拥有特定领域知识的工程师通过不断试错完成的。这往往是个既费力又容易出错的过程,并且无法保证能否找到最优解。深度学习很大程度上自动化了特征工程。
梯度下降
- 通过沿着梯度方向(参数光宇输出值的导数),逐步改变系统的参数,从而最小化系统的输出值的过程。这是神经网络的主要训练方式。在神经网络训练的语境下,系统是神经网络构成的,而损失函数则是由工程师选择的。系统的参数是神经网络各层的权重。每个迭代会从训练集中抽取一个批次用于训练。
梯度消失问题
- 这是深度学习网络训练中会遇到的一个经典问题
假设空间
- 在机器学习的语境下,假设空间指机器学习问题可能的解决方案的集合。模型的训练正是在假设空间中搜索一个好的解决方案。假设空间是由你选择的机器学习模型类型和架构决定的。
机器学习
- 机器学习是人工智能的一个子领域。它可以通过学习标注了预期答案的有标签数据,自动地探索能够解决复杂问题的规则。它和传统的编程模式不同,因为无须人工设计解决问题的规则。
超参数
- 模型的可调参数和反向传播中不可调的优化器。一般而言,学习率和模型架构都是常见的超参数。网格搜索和其他更精巧的超参数调优算法都可以实现超参数调优。
超参数优化
- 有时又叫超参数调优,指对于给定的机器学习任务,搜索能够最小化验证集损失的一组超参数的过程。
词嵌入
- 针对文本的神经网络使用的一种向量化单词的方法。通过嵌入查询过程,单词会被映射到一个一维张量(即向量)上。和one-hot编码不同,词嵌入表示的是非稀疏的向量。向量中的元素值为连续且变化的,而不是仅为0或1
单词表
- 在深度学习中,单词表指一组离散的,互不相同的元素。这些元素可以作为神经网络的输入或输出。一般而言,单词表中的每个元素都可以映射到一个整数索引上,然后进一步转换为one-hot编码或嵌入表示
点积
- 内积
内积
- 又叫作点积。两个形状相同的向量间的数学运算,其结果为一个标量。若要计算向量a和向量b之间的内积,对于所有可取的值i,对a[i]*b[i]求和即可。从几何的角度来看,两个向量的内积相当于其长度的乘积以其夹角的余弦。
第一章
-
人工智能是一个非常宽泛的领域,它的简洁定义是:试图将需要人类主观意识参与的任务自动化。正因如此,人工只能涵盖了机器学习、神经网络和深度学习,但又包含了其他很多和机器学习不同的策略。
-
机器学习就是自动发现解决复杂问题的规则的过程。
-
机器学习的工作流程由两个阶段构成:训练阶段和推断阶段。在训练阶段中,机器自动发现数据与对应答案之间的规则,这个过程中发现的规则会封装在训练好的模型中。它们是训练阶段的成功,并且为推断阶段奠定基础。推断阶段指运用习得的模型为新的数据获取答案。
-
训练阶段,这一阶段输入是数据和答案,叫作训练数据。每一对作为输入的数据和预期的答案叫作样例。根据这些样例,训练流程就可以自动发现规则。
-
机器学习算法并不是通过自由发挥得出这些规则,人类工程师在训练之初就提供了这些规则的蓝图。这些蓝图封装在模型中,而模型又形成了机器潜在学习的规则的假设空间。
-
在深度学习中,根据神经网络的组成层数、每一层的具体类型以及各层之间的连接关系,模型最终会有所不同
-
带标签的样例来逐步减少模型输出误差的方法,叫作监督式学习。
-
机器学习就是要从数据中学习。但到底学习哪些内容呢?其实就是一种有效转换数据的方法,换言之,将数据从旧表示转换为新表示,从而更有效地解决现阶段的问题。
-
表示旧是一种处理数据的方式。通过不同的处理方式,同一组数据可以有不同的表示。编码和表示实质上指的是同一个东西,它们可以交换使用。
-
机器学习的本质就是找到一种合适的方式巴输入数据的旧表示换成新表示,并且这一表示适用于解决当下特定的任务。比如检测图像中车辆的位置或者判断图像中出现的是猫还是狗。
-
神经网络是机器学习的子领域,其中实现数据表示转换的系统,其架构部分参考了任何动物大脑中神经元的连接方式。
-
深度学习旧是关于深度神经网络的学习和应用。深是指众多的连续的表示层,数据模型拥有的层数叫作模型的深度。这一领域还有其他名称,比如分层表示学习和层级表示学习。
-
深度学习有两个至关重要的特点:一是循序渐进、一层接一层地发展更为复杂的表示;二是在整个过程中,中间这些递进的表示层同时是被学习的,每一层的更新都会兼顾上层和下层的表示需求。正是这两个特点的结合,使深度学习相比之前的机器学习策略获得了更大的成功。
-
数据的表示又叫作张量(tensor),它会流经(flow)模型的每一层和其他数据处理节点,从而实现机器学习模型的推断和训练。
-
flow即各种数字运算(节点)相互连接而成的数据结构。这些节点可以看作神经网络中连续的层,每一个节点都将张量作为输入,然后产生新的张量作为输出。随着张量“流经”TensorFlow图的各个节点,它也转换成不同的形状和值。这实际上就是表示的转换,也是神经网络的关键。
-
小结
- AI是实现认知性任务自动化的研究。机器学习是AI的子领域,旨在通过学习训练数据,自动发现图像分类这类任务背后的规则
- 机器学习要解决的核心问题是如何转换数据的表示,从而更好地解决当下的问题
- 在机器学习中,神经网络可以通过连续的数学运算步骤(层)来转换数据的表示。深度学习领域涉及拥有一定”深度“的神经网络,也就是拥有很多层的神经网络
- 得益于硬件性能的提升,带标签数据的增长以及算法上的革新,深度学习领域自2010年以来取得了一系列惊人的成就,解决了很多之前难以解决的问题,还创造了很多令人兴奋的新机遇
- 与其他语言一样,JavaScript和Web浏览器同样适用于训练和部署深度神经网络
- TensorFlow.js是一个全面、灵活且强大的JavaScript开源深度学习库,也是本书的重点
第二章
- 在深度学习的语境下,将输入特征映射到输出目标上的函数叫作模型。模型函数接收特征,执行一些计算,然后生成预测值。在深度学习中,模型还可以叫作网络。我们第一个模型将用线性回归来实现。
- 在机器学习中,回归指模型会输出实数值,并且会尝试匹配训练集中的目标。
- 神经网络的核心组成部分是层,它是一个数据处理模块,可以看作张量之间的一个可调函数。
- 从本质上讲,密集层旧是执行每组输入和输出之间的可调的乘积累加运算。因为只有一个输入和一个输出,所以这个模型就是高中所学的简单线性方程:y=m*x+b。
- 在密集层中,m叫核,b叫偏差。
- 为了得到较好的预测值,必须让模型从数据中学习,自动为核和偏差寻找恰当的数值。这个寻找的过程就是训练过程。
- 模型的最好预测就是每一个预测值都于目标完全吻合。在这种情况下,模型输出的预测值和目标的差值就是0,因此损失也是0
- TensorFlow.js可以通过调用模型的fit()方法来训练模型,让模型更好地拟合训练集。
- 当模型拟合完毕,我们自然会想知道它是否有效实现。这里有一点要特别注意,那就是用于评估模型的数据不能在训练过程中出现。具体而言,就是将测试集和训练集分离,避免用测试集进行训练。是机器学习工作流程中的重要组成部分,必须加以掌握。
- 模型的evaluate()方法会根据输入的样例特征和目标来计算损失函数的值。
- 构建、训练到评估TensorFlow.js模型的全过程
代码
npm install @tensorflow/tfjs
import React, { useEffect } from 'react';
import * as tf from '@tensorflow/tfjs';
function MyComponent() {
useEffect(() => {
// 创建一个简单的线性回归模型
const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));
model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});
// 生成一些用于训练的数据
const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);
// 训练模型
model.fit(xs, ys, {epochs: 10}).then(() => {
// 模型训练完成后可以进行预测
const output = model.predict(tf.tensor2d([5], [1, 1])) as any;
alert(`预测结果: ${output.dataSync()[0]}`);
});
}, []);
return (
<div>
{/* 这里放置组件的 JSX 内容 */}
</div>
);
}
export default MyComponent;
共同学习,写下你的评论
评论加载中...
作者其他优质文章