2018年1月1日星期一

单样本学习:使用孪生神经网络进行人脸识别

这篇文章简要介绍单样本学习,以孪生神经网络(Siamese neural network)进行人脸识别的例子,分享了作者从论文 FaceNet 以及 deeplearning.ai 中学到的内容。

图片来自 pixabay.com(https://pixabay.com/)


如果你对这个主题很感兴趣并希望深入了解的话,可以参考论文:


FaceNet:人脸识别和聚类的统一嵌入(FaceNet: A Unified Embedding for Face Recognition and Clustering)。


让我们开始吧!


单样本学习


为了理解使用单样本学习的原因,我们需要讨论一下深度学习和数据。通常,在深度学习中,我们需要大量的数据,拥有的数据越多,结果就会越好。然而,仅从少量数据中学习会更加方便,因为并不是所有的人都拥有丰富的数据。


此外,为了识别一个对象,人脑也不需要成千上万张这类对象的图片。我们现在不谈论对人脑的模拟,因为它过于复杂和强大并且很多东西都与学习和记忆有关,例如感觉、先验知识、交互等。


这里的主要思想就是,我们需要仅仅从少量的数据中就能学会一个对象分类,这就是单样本学习(one-shot learning)算法。


人脸识别


在人脸识别系统中,我们希望通过输入一张人脸图片就能够识别对应的人的身份。而如果系统并没有成功地识别图片,是因为这个人的人脸图片并不在系统的数据库中。


为了解决这个问题,我们不能仅使用单个卷积神经网络的原因有两个:1)CNN 在小数据集上是不起作用的;2)如果每次向系统中加入一位新人的一幅图片时再去重新训练模型,也是极其不方便的。为此,我们在人脸识别中使用了孪生神经网络。


孪生神经网络


孪生神经网络的目标是寻找两个可比较对象的相似程度(例如,签名验证、人脸识别等)。这个网络有两个相同的子网络,两个子网络有相同的参数和权重。

图片来源于 C4W4L03 Siamese Network(https://www.youtube.com/watch?v=6jfw8MuKwpI),感谢 Andrew Ng。


上图是 deeplearning 中利用孪生网络架构做人脸识别的例子。正如你所看到的,第一个子网络的输入是一幅图片,然后依次馈送到卷积层、池化层和全连接层,最后输出一个特征向量(我们并没有使用 softmax 函数来做分类)。最后的向量 f(x1) 是对输入 x1 的编码。然后,向第二个子网络(与第一个子网络完全相同)输入图片 x2,我们对它做相同的处理,并且得到对 x(2) 的编码 f(x2)。


为了比较图片 x(1) 和 x(2),我们计算了编码结果 f(x1) 和 f(x2) 之间的距离。如果它比某个阈值(一个超参数)小,则意味着两张图片是同一个人,否则,两张图片中不是同一个人。

上式是 x1 和 x2 的编码之间的距离。


这适用于任何两张图片。

那么,为了得到对输入图片的良好编码,我们如何学习相应的参数呢?


我们可以在三重损失函数上应用梯度下降,所谓三重损失函数指的是使用三幅图片计算一个损失函数:一副固定影像 A,一副正例图像 P(与固定影像是同一人),以及一张反例图像 N(与固定影像不是同一人)。所以,我们想让固定影像 A 与正例 P 的编码之间的距离 d(A,P) 小于等于 A 与 N 的编码之间的距离 d(A,N)。也就是说,我们要让同一个人的图片更加相互接近,而不同人的照片要互相远离。

三重损失将固定影像 A 与正例 P 之间的距离最小化了,这两者具有同样的身份,同时将固定影像 A 与反例 N 之间的距离最大化了。来自论文《FaceNet: A Unified Embedding for Face Recognition and Clustering》。


这里的问题是,模型可能学习给不同的图片做出相同的编码,这意味着距离会成为 0,不幸的是,这仍然满足三重损失函数。因为这个原因,我们加入了边际α(一个超参数)来避免这种情况的发生。让 d(A,P) 与 d(N,P) 之间总存在一个差距。

三重损失函数:

这里的最大化处理意味着只要 d(A, P)—d(A, N)+ α小于等于 0,那么 loss L(A, P, N) 就会是 0,但是一旦它大于 0,那么损失值就是正的,这个函数就会将它最小化成 0 或者小于 0。


代价函数是训练集的所有个体的三重损失的和。

训练集


为了定义 A 和 P,训练集应该包含同一个人的多张图片,一旦模型训练完毕,我们就可以仅仅通过一张图片来识别出一个人。


我们如何选择用于训练模型的图片呢?

如果我们随机选择图片,可能很容易就能满足损失函数的限制,因为大多数情况距离都是很大的,而且梯度下降也不会从训练集中学到很多(大幅更新权重)。因为这个原因,我们需要寻找这样的 A、P 和 N,使得 A 和 P 很接近 N。我们的目标是让训练模型变得更加困难,以使得梯度下降学到更多。


原文链接:http://ift.tt/2pB8ZOm

]]> 原文: http://ift.tt/2CcWoCN
RSS Feed

机器知心

IFTTT

Parris:机器学习算法自动化训练工具

Parris 是一个自动化训练机器学习算法的工具。如果各位读者经常需要构建并训练机器学习模型,且花费很多时间来设置运行服务器,使用远程登录服务以监控进程等。那么这个工具将对大家十分有帮助,甚至我们都不需要使用 SSH 访问服务器以完成训练。机器之心简要介绍了该工具,更详细的内容请查看该 GitHub 项目。


项目地址:http://ift.tt/2CliYNB


安装


我们需要一个 AWS 账户,并将 AWS 证书加载到工作站中(通过 $ aws configure 配置),我们还需要构建好的机器学习算法和数据集。此外,我们还需要一个 S3 存储体(bucket)或其它存储位置来存储算法的训练结果。


UNIX/Linux:

$ git clone http://ift.tt/2A3rj2y && cd parris $ virtualenv -p python3 env $ source env/bin/activate (env) $ pip --version pip 9.0.1 from .../env/lib/python3.6/site-packages (python 3.6) (env) $ pip install -r requirements.txt 

Windows:

$ git clone http://ift.tt/2A3rj2y && cd parris $ virtualenv -p python3.exe env $ env\Scripts\activate (env) $ pip --version pip 9.0.1 from ...\python\python36\lib\site-packages (python 3.6) (env) $ pip install -r requirements.txt

以上是简要的安装过程,后一部分我们将具体讨论如何使用 Parris,具体包括从配置环境到登录第一个机器学习训练堆栈的所有过程。当我们熟悉了这个工具后,我们可以查看该工具的配置参数,以理解更多的操作选项。参数配置与入门指导将共同帮助读者全面了解这个强大的工具。


此外,目前 FAQ 页面已经有很多关于该工具的问题。如果该文档没包含读者出现的问题,那么我们可以选择提交 GitHub Issue,这样其它读者就能查阅该问题与解答。

  • 入门指导地址:http://ift.tt/2Cme56S
  • 参数配置指导地址:http://ift.tt/2A3rmLM
  • 常见 FAQ 地址:http://ift.tt/2CoEEIB


开始使用 Parris


我们将介绍如何只用很简单的点击操作、命令行和脚本,就可以开始运行训练任务。


概览


Parris 的功能有:

  • 创建一个 Lambda 函数
  • 在调用 Lambda 函数的时候运行一个 CloudFormation 堆栈
  • 第一次运行时,在堆栈的 EC2 实例上运行一个 UserData 脚本,以启动训练过程
  • 训练完成的时候停止 EC2 实例


建立这个工具的目的在于减少训练机器学习算法过程中重复乏味的环境配置,同时通过更高效地利用服务器的运算时数以节省计算成本(服务器一旦启动就会立刻开始训练,并会按照你的配置停止训练)。


预备工作


请按照 README 中的说明进行设置,我们需要的是一个机器学习算法、可用的数据集,和一个用于启动训练过程的 Bash 脚本。


我将给出一个示例训练器脚本(trainer-script),以帮助你更好地理解使用细节。


关于训练结果提取的注意事项


训练器脚本或算法本身需要将其训练结果输出到外部(如另一个服务器、一个 S3 bucket,等)。CloudFormation 堆栈在训练结束之后会立即终止,从而其中的训练结果也将很快被删除。毕竟我们并不推荐在该服务器上保存任何时段的训练结果。


0. 准备配置


经过合适的设置之后,使用该工具的主要操作在于编辑 training-config.json 配置文件以及实际运行训练过程的 trainer-script.sh 脚本。由于是第一次进行设置,你还需要设置 lambda-config.json 配置文件(这个很简单,只需要写两行,每行是一个可选项)。


这里提供的配置是一个使用了我的 GitHub repo 之一的基础训练任务示例,以使你更好地理解。除了一些账户相关的设置如 IAM role 的 ARN 值和 S3 bucket 名,其它可以按原样直接运行。


1. 在 training-config 中:


  • 将 subnet-id 改写为你的 Subnet 之一的 ID(如果这里不理解,请先在你的 AWS 账户上设置 VPC、Subnet、Security Group 和 EC2 Keypair。如果你是第一次使用 AWS,在你的账户中会有一些默认的资源)。
  • 将 security-group-id 改写为你的 VPC 中的一个 Security Group。
  • 将 ec2-keypair-name 改写为你的一个 EC2 密匙对。
  • 将 instance-type 改写为 t2.micro 或另一种小型实例类型。由于运行这个堆栈仅仅是为了教学目的,我们希望使用计算成本更低的实例类型,并快速结束任务。t2.micro 是满足这一目的的最重要的一步。

         可以通过查看 AWS Simple Monthly Calculator 评估特定实例类型(如 EC2)的计算成本。

  • 所有其它的 training-config 参数可以保持不变,除非必要。可以查看 CONFIGURATION 文档了解各个参数的作用。

2. 在 lambda-config.json 中:

  • 将 lambda-role-arn 更新为你的一个 IAM role 的 ARN 值(如果这里不理解,可以查看以下亚马逊文档)。


Lambda IAM Execution Role 向导: http://ift.tt/2A3ro6m


在设置 IAM Role 的时候,你需要将一个或多个 Policy 附加于 Role 上以定义 Lambda 函数可以访问的一切。以下是我使用的案例,可以使 Lambda 函数启动一个新的 CloudFormation 堆栈、从 S3 bucket 中获取对象,以及对 EC2 实例进行大量运算:

{     "Version": "2012-10-17",     "Statement": [         {             "Sid": "VisualEditor0",             "Effect": "Allow",             "Action": [                 "cloudformation:CreateStack",                 "cloudformation:UpdateStack",                 "cloudformation:ValidateTemplate",                 "ec2:DetachVolume",                 "ec2:AttachVolume",                 "ec2:ModifyVolume",                 "ec2:ModifyVolumeAttribute",                 "ec2:DescribeInstances",                 "ec2:TerminateInstances",                 "ec2:DescribeTags",                 "ec2:CreateTags",                 "ec2:DescribeVolumesModifications",                 "ec2:RunInstances",                 "ec2:StopInstances",                 "ec2:DescribeVolumeAttribute",                 "ec2:CreateVolume",                 "ec2:DeleteVolume",                 "ec2:DescribeVolumeStatus",                 "ec2:StartInstances",                 "ec2:DescribeVolumes",                 "ec2:ModifyInstanceAttribute",                 "ec2:DescribeInstanceStatus",                 "s3:GetObject"             ],             "Resource": "*"         }     ] }

我强烈推荐(虽然不是必要的)使用一个 Policy 以允许将 Lambda 函数写到一个 CloudWatch logstream 上。当 Lambda 函数出错的时候,可以通过读取日志查找错误。以下是我使用的在一个 Policy 上所有的 CloudWatch Write 许可,这使得可视化编辑器的设置变得非常简单:

{     "Version": "2012-10-17",     "Statement": [         {             "Sid": "VisualEditor0",             "Effect": "Allow",             "Action": [                 "logs:DeleteSubscriptionFilter",                 "logs:DeleteLogStream",                 "logs:CreateExportTask",                 "logs:DeleteResourcePolicy",                 "logs:CreateLogStream",                 "logs:DeleteMetricFilter",                 "logs:TagLogGroup",                 "logs:CancelExportTask",                 "logs:DeleteRetentionPolicy",                 "logs:GetLogEvents",                 "logs:AssociateKmsKey",                 "logs:FilterLogEvents",                 "logs:PutDestination",                 "logs:DisassociateKmsKey",                 "logs:UntagLogGroup",                 "logs:DeleteLogGroup",                 "logs:PutDestinationPolicy",                 "logs:TestMetricFilter",                 "logs:DeleteDestination",                 "logs:PutLogEvents",                 "logs:CreateLogGroup",                 "logs:PutMetricFilter",                 "logs:PutResourcePolicy",                 "logs:PutSubscriptionFilter",                 "logs:PutRetentionPolicy"             ],             "Resource": "*"         }     ] }

最后,我们需要设置 trainer-script.sh,从而切实运行训练过程。这一部分几乎完全由你自己编写,因为你的算法依赖项和输出训练结果的方法和我的示例将是不同的。


1. 在 trainer-script.sh 中:

  • 记住你的训练脚本是在一个新的服务器上运行的,因此关于依赖项、目录结构等所有设置都需要在训练开始前搞定。例如,如果你使用的是不同版本的 Python 或者需要复制一个 GitHub repo,确保写入这些步骤。


一旦完成以上步骤,基本上就可以开始使用这个工具了。如果你没有在 lambda-config.json 中使用 s3-training-bucket 值,那你就可以进行下一步了。如果你使用 S3 bucket 进行加载配置,你需要在 S3bucket 中加载以下的文件,命令的结构如下所示(没有写特定的目录或文件名)。

+---your-s3-bucket|   \---trainer-script.sh|   \---training-config.json|   \---lambda-config.json 

完成之后,就可以进行下一步了。


1. 准备 Lambda 函数


在开始训练之前,我们需要一种开启方式,此时就需要 Lambda 配置。这一步需要你创建一个 AWS Lambda 函数,该函数可用于同一个算法的多个训练工作,或者不同算法的多个训练工作。


1. 在 Parris 包 root 中,激活 virtualenv。

2. 使用 $ python setup.py 创建 Lambda 函数

       a. 如果已经有 Lambda 函数,这一步将更新其代码包。

3. 如果一切顺利,则日志将输出配置用的 ARN 值。


2. 登录我们的第一个训练堆栈


注意,第一步可能需要付费,所以先确保你需要这个工具并在开始前先通读本文档,尤其是后面的第四步。


1. 打开 AWS 控制台并导航到你的 Lambda 函数。

2. 点击页面顶部的「Test」按钮,并手动调用函数。如果你并没有配置好的测试,那么就需要完成以下步骤:

  • 在 Saved Test Events 的 Test 按钮旁边的下拉菜单,点击「Configure test events」以创建一个新的。
  • 因为 Lambda 函数只有一个活动进程(即在调用时登录到一个新的 CloudFormation 堆栈),我们并不需要传递任何的参数(即使传递到 Lambda 的参数被接收了,那也不会使用)。
  • 创建一个名为 Parris-Test-Event、内容为 {} 的事件作为测试,并点击保存。
  • 在关闭创建对话框后,点击下拉菜单中新 Test Event 内的 Test 按钮,并等待用来更新的执行结果。

3. 当你的函数已经运行,执行结果应该出现「succeeded」,并输出 {}。

  • 如果函数报错,那么需要从执行结果定位错误地址。一般而的报错很可能是因为 Lambda 函数的 IAM 角色中缺少 IAM 许可。

4. 切换到 AWS 控制台的 CloudFormation 试图,并查看是否登录了新的 CloudFormation 栈。这大概只需要 1 到 2 分钟,但很依赖于我们登录的实例(Instance)。

  • 看不到你的 CloudFormation 栈?确保你在正确的区域。
  • 注意堆栈的名字应该匹配训练项目的名,即我们在 training-config.json 配置的名字。如果处于某些原因你们并没有配置训练项目名,那么栈的名字应该采用默认名「parris-stack」。

5. 切换到 AWS 控制台的 EC2 实例视图,以查看你登录的新实例。它应该处于「Running」状态,并运行你的训练项目。


注意,在该版本的工具中,CloudFormation 栈在完成训练后并不会终止。相反,EC2 实例将自行关闭。由于实例不再运行,因此我们能节省额外的成本。但若是要删除它,我们需要导航回控制台的 CloudFormation 视图,并点击下拉 Action 中删除堆栈的选项。


3. 获取训练结果


获取训练结果主要依赖于如何设置算法来保存结果参数。大多数情况下这些结果将保存至本地文件夹(即服务器的某处,可能在训练过程的包中)。但是,由于我们在该指南结束时需要终止该堆栈,因此我们想将它们挪到一个更永久的位置。


4. 终止 CloudFormation 栈


现在你已经创建了 CloudFormation 栈,并确认它按照预期工作,那么我们可以安全地终止该栈,以节省开销。

  • 1. 打开 AWS 管理控制台,导航至 CloudFormation 视图。
  • 2. 从列表中选择你安装的 CloudFormation 栈。
  • 3. 点击页面顶部的 Actions 下拉菜单,点击 Delete Stack。网页会询问是否确认删除,点击 Delete。
  • 4. 查看该栈的 Events 标签(页面底部)来追踪进程。你必须刷新该页面才能添加新的事件。
  • 5. CloudFormation 栈终止后,将从列表中消失。你可以点击列表左上角,将视图的 Filter 从 Active 更改至 Deleted,来确认是否已删除。查看该栈的当前名称,状态为「DELETE_COMPLETE」。那么此时你不需承担该训练资源所需的任何开销。

一般而言,你应该在每次训练工作完成时终止 CloudFormation 栈。尽管你可以更新 CloudFormation 栈,但该工具的运行原理是:训练工作被 EC2 实例上的 UserData 脚本启动,该脚本仅在该实例首次安装时运行。更新 CloudFormation 栈无法重新安装该实例(除少数环境),这取决于栈被更新的参数。大多数情况下,该实例可以停止再重新开始,但这不足以重新启动训练工作。由于终止和安装新实例与更新原有的实例相比,不需要额外的开销,因此算法训练最佳实践是终止栈,然后在需要重新训练时重新安装栈。


5. 更新 Lambda 函数


更新 Lambda 函数和在 lambda-function.py 文件中做出改变一样简单,重新运行$ python setup.py。脚本首先尝试创建 Lambda 函数,如果创建失败出现函数中已经存在的错误,则脚本将运行函数代码的更新版。


注意 Lambda 函数配置的特定细节(即内存)不要被脚本更新,你需要向脚本添加额外的逻辑来更新函数元数据,或删除原来的函数,使用更新后的元数据重新创建 Lambda 函数。原因在于 Lambda 函数有多种更新方式,没有一种方法能够覆盖所有场景,所以我提出一种最可能立即得到使用的方式。未来该工具可能包括覆盖所有场景的额外更新行为。


你可以通过以下方式测试更新行为:

1. 打开 lambda-function.py,定位至第 272 行 return return-values 语句。

2. 在返回语句上面插入新的一行,如下:

logging.warning('This is a synthetic warning message!')        return return_values

 i. 任意信息在这里都可以运行,它可以出现在函数的大多数地方。只要我们更改代码,就可以展示更新后的 Lambda 函数。

3. 一旦作出更改,只需再次运行 $ python setup.py,查看更新 ARN 的日志记录输出。

4. 使用 Test 按钮再次启动 Lambda 函数,展开 Execution Result。日志输出框应该包括 Lambda 函数通常的日志输出,上面的应该是测试信息。

5. 确保终止 CloudFormation 栈,以节约成本。


6. 更新训练栈


更新 CloudFormation 栈的功能有限,因为 CloudFormation 栈不强制重启训练。因此,不推荐更新 CloudFormation 栈,需要重新训练时可以删除再重新安装 CloudFormation 栈。


7. 在 AWS 管理控制台之外开始训练


此时你已经完成了 Parris 的一般步骤!之后的工作更多地是为了更方便地使用该工具。我们的第一个示例是设置一个 IoT 设备以便根据需求开启新的训练工作。更多示例将包括设置常规重新训练的时间表(即针对你的应用依赖于需要在新数据集上重新训练的算法,才能保持有效)。

]]> 原文: http://ift.tt/2CpITns
RSS Feed

机器知心

IFTTT

用神经网络进行文件无损压缩:斯坦福大学提出DeepZip

神经网络不仅可以分析、识别特征,提出预测,还可以压缩文件。斯坦福大学的研究者们最近提交的论文中,循环神经网络捕捉长期依赖关系的优势被用于无损压缩任务中,这种被称为DeepZip的技术已在文本和基因组数据文件中得到了实验。研究人员称,其结果颇具潜力。


正在进行的大数据变革让我们收集了大量不同类型的数据,如图像、文本和音频等;新类型的数据如3D VR数据、用于自动驾驶的点云数据、不同类型的基因组数据等,占据着巨量的存储空间。因此,人们对于统计模型和适用于各种数据格式的高效压缩方法有着很大的需求。


近50年来,无损压缩技术已经历了很多重要的发展。在克劳德·香农的一个经典研究中,这位先驱者指出,熵率是给定数据源可能达到的最佳压缩比,同时也给出了一种实现方法(尽管不甚实际)。J. Rissanen提出了算术编码,这是一个实现已知分布熵边界的有效方法。对于未知分布的数据源(如文本和DNA),他还设计了算术编码的自适应变体,它可以通过尝试学习条件k-gram模型的分布来进行压缩。尽管这种过程的复杂度会随k的变化而呈指数级增长,通常上下文会被限制在k=20符号。这会导致压缩比例的显著损失,因为模型无法捕捉长期依赖关系。我们都知道基于循环神经网络(LSTM/GRU)的模型善于捕捉长期依赖关系,同时可以较准确地预测下一个字母/单词。如此一来,能否使用基于RNN的框架来用于压缩任务?在斯坦福大学的一份研究中,研究人员探索了使用基于RNN的语言模型及算术编码来提升无损压缩的性能。


在这一研究的论文中,研究人员首先分析和理解了已知熵情况下,合成数据集上RNN和算术编码方法的表现,其目的是对各种RNN结构的能力和极限进行直观的理解。研究人员也对伪随机数生成序列(PRNG)进行了测试,尽管其熵率为零(因为它们是确定性的),但使用标准技术极难压缩。基于对此前在合成数据集上测试的经验,研究人员使用了文本压缩模型和基因组数据集。


压缩器框架


2.1 概述


首先是用于实验的压缩器模型,其框架可以被分为两个模块:

  1. RNN概率评估器模块:对于数据流S0,S1……SN,RNN概率评估器模块可以基于此前观察到的负号S0,S1……Sk-1来估计Sk的条件概率分布。这一概率估计Pˆ(Sk|S0, S1, . . . , Sk−1)会被递送到算术编码模块;
  2. 算术编码器模块:算法编码器模块可被认为是FSM,它接收下一个符号的概率分布估计并将其编码成一个状态(与解码器的操作相反)。

2.2 RNN概率评估器模块


实际上,RNN评估器模块可以是任何循环神经网络(LSTM/GRU),其中包括最终估算概率的Softmax层。算术编码器模块可以是经典的算术编码FSM,或更快的非对称数字系统(Asymmetric Numeral Systems,ANS)模块。对于模型的运行,有一些重要的限制:

  1. 输入的因果关系:RNN评估器必须是具有因果关系的,它可以视输入为特征,仅仅基于此前的编码符号进行估算(BiLSTM等或许不行)。
  2. 权重更新:权重更新(如执行)应在编码器和解码器中执行。这是必要的,因为我们需要编码器和解码器生成每个符号的分布。


研究人员主要探索了两个模型:符号级别的GRU模型(DeepZip-ChGRU)和基于特征的模型(DeepZip-Feat)。在DeepZip-GRU上,在第k步,GRU模块的输入是Xk-1,而状态k-1是输出的状态,直到k点为止。DeepZip-Feat包含输入作为特征计算因果关系,如过去的20个符号,以及观察到的流内上下文表现记录。此外,研究人员也考虑过基于文字的模型(Attention-RWA模型)。


2.3 算术编码器模块


算术编码器保持在区间[0,1]之间。每个符号流唯一地确定一个范围,这个范围可按顺序计算,并直接基于下一符号的概率评估。它可视为传递至下一迭代的算术编码器的一个状态。最后,该范围被编码,由此形成了压缩数据。在给定概率评估的情况下,解码操作则相反。算术编码操作如图 2 所示。


图 2:i.i.d (0.6, 0.2, 0.1, 0.1)分布式源的序列 (0, 2, 3)的算术编码


2.4 编码器&解码器操作


编码器&解码器操作如下图所示:

  1. 算术编码器模块通常从首个符号S0的自定义概率分布评估开始。完成之后,解码器可以解码首个符号。
  2. 算术编码器和RNN评估器模块都通过迭代传递状态信息。算术编码器的最终状态充当压缩数据。
  3. 如果模型训练超过一个epoch,RNN评估器模块的权重需要被存储,并计算压缩大小(MDL Principle [14])。


图 3:编码器模型架构


接着研究人员讨论了不同模型在上述数据集上的一些有趣实验。模型有:

  1. DeepZip-ChRNN:基于字符级RNN的神经网络模型。
  2. DeepZip-ChGRU:基于字符级GRU的神经网络模型。
  3. DeepZip-Feat:基于GRU的模型,其中包含所有以前观察到的符号的功能,而不仅仅是之前的输入。

3 合成数据集上的实验



图 5:包含128个单元的 DeepZip-ChRNN 模型在Markov-k源上的表现


图 6:包含128个单元的 DeepZip-ChGRU 模型在Markov-k源上的表现



图 7:包含128个单元的DeepZip模型与GZIP[15]、适应性算术编码-CABAC的表现对比


图 8:包含128个单元的DeepZip模型在实际数据集上的表现


论文:DeepZip: Lossless Compression using Recurrent Networks 


论文地址:http://ift.tt/2pQ80Ka


摘要:现今,我们生成的数据量大幅增加。新类型的数据,比如基因组数据[1]、3D-360度 VR 数据、自动驾驶点云数据已经出现。大量努力用在了分析以上数据的统计学信息,以设计好的压缩器。我们由信息论得知,好的压缩器来自好的预测器[2]。我们知道基于循环神经网络(LSTM/GRU)的模型擅长捕捉长期依赖关系 [3],并可以很好地预测下一字符/词。这样RNN可被有效用于压缩吗?我们分析了RNN在数据压缩问题上的应用。


压缩器DeepZip包含两个主要模块:基于RNN的概率评估器和算术编码模块。首先,我们讨论了现有文献和基本的模型架构。接着我们深入到合成及真实文本和基因组数据集的实验结果。最后,我们对发现的结果和未来工作作了讨论。

]]> 原文: http://ift.tt/2A31HTd
RSS Feed

机器知心

IFTTT

ACL终身成就奖得主Aravind Joshi去世

李根 发自 凹非寺

量子位 报道 | 公众号 QbitAI

Aravind K. Joshi(1929-2017)

美国时间2017年最后一天,宾夕法尼亚大学教授Aravind K. Joshi离世。

Aravind Joshi不算是一个广为大众熟知的科学家,但这位自然语言处理与计算语言学领域泰斗、ACL终身成就奖得主、宾夕法尼亚大学教授,一生不可谓不是荣誉等身、桃李满天下。

荣誉等身

Aravind Joshi1929年出生于印度浦那,先后求学于印度浦那大学和印度科学研究所,1960年在美获得宾夕法尼亚大学电气工程系博士学位,并成为宾大教授,参与创办了认知科学研究所(IRCS)。

Aravind Joshi教授早期研究信息和传播理论,1958年开始专攻计算机科学和语言学,并在两个学科交叉问题上取得不少成就。

Aravind Joshi教授利用他在计算、数学和形式语言学,自然语言处理和人工智能方面的专业知识,研究自然语言中的表示、推理理论,和话语计算,还有处理模型的心理语言学意义以及处理某些种类的双语话语。此外,Aravind参与设计和实施各种自然语言处理系统。

Aravind Joshi教授一生获誉众多,其中最具代表性的有几项:

Guggenheim Fellow,1971-1972;

IEEE Fellow,1976;

全美人工智能会议最佳论文奖,1987;

AAAI 创始Fellow,1990;

IJACI 卓越研究奖,1997;

ACM Fellow,1998;

当选美国国家工程院院士,1999;

ACL终身成就奖,2002;

David Rumelhart奖,2003;

本杰明·富兰克林计算机与认知科学奖,2005;

……

桃李满天下

Aravind Joshi教授的知名弟子中,Kathleen McKeown,David Chiang,以及Liang Huang等都是其博士弟子。

Kathleen McKeown,目前是哥伦比亚大学教授、数据科学与工程研究所所长,还是哥大历史上的首位计算机系女性主任;

David Chiang,目前是University of Notre Dame(圣母大学)副教授,2005年ACL最佳论文得主,还是ACL,,NAACL,EACL,IJCNLP,EMNLP,NIPS,ICML,IJCAI,AAAI等顶会论文审稿人;

还有来自中国的弟子梁煌(Liang Huang),目前是俄勒冈州立大学计算机系助理教授,也是NLP、ML领域的知名科学家。

而近年名声大振的MIT CSAI教授Regina Barzilay、耶鲁大学教授Dragomir Radev,都和Aravind Joshi教授有师承关系。

此外,Aravind Joshi教授还有一些中国情缘,除了一些知名华人学生,Aravind Joshi教授还在2010年来到北京COLING大会现场,与国内科学家和研究员进行面对面交流。

2005年被授予本杰明·富兰克林计算机与认知科学奖时,Aravind Joshi教授得到的评价是:他对我们理解语言如何在大脑中作用做出了基本贡献,而且开发的技术让计算机可以有效地处理各种人类语言,这些进步促进了计算机翻译方法革新。

美国东部时间2017年12月31日,Aravind Joshi教授在美去世,享年88岁。

Aravind Joshi教授千古!

欢迎大家关注我们的专栏:量子位 - 知乎专栏

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复"招聘"两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态



via 量子位 - 知乎专栏 http://ift.tt/2DO7f6x
RSS Feed

RSS5

IFTTT

ACL终身成就奖得主Aravind Joshi去世

李根 发自 凹非寺

量子位 报道 | 公众号 QbitAI

Aravind K. Joshi(1929-2017)

美国时间2017年最后一天,宾夕法尼亚大学教授Aravind K. Joshi离世。

Aravind Joshi不算是一个广为大众熟知的科学家,但这位自然语言处理与计算语言学领域泰斗、ACL终身成就奖得主、宾夕法尼亚大学教授,一生不可谓不是荣誉等身、桃李满天下。

荣誉等身

Aravind Joshi1929年出生于印度浦那,先后求学于印度浦那大学和印度科学研究所,1960年在美获得宾夕法尼亚大学电气工程系博士学位,并成为宾大教授,参与创办了认知科学研究所(IRCS)。

Aravind Joshi教授早期研究信息和传播理论,1958年开始专攻计算机科学和语言学,并在两个学科交叉问题上取得不少成就。

Aravind Joshi教授利用他在计算、数学和形式语言学,自然语言处理和人工智能方面的专业知识,研究自然语言中的表示、推理理论,和话语计算,还有处理模型的心理语言学意义以及处理某些种类的双语话语。此外,Aravind参与设计和实施各种自然语言处理系统。

Aravind Joshi教授一生获誉众多,其中最具代表性的有几项:

Guggenheim Fellow,1971-1972;

IEEE Fellow,1976;

全美人工智能会议最佳论文奖,1987;

AAAI 创始Fellow,1990;

IJACI 卓越研究奖,1997;

ACM Fellow,1998;

当选美国国家工程院院士,1999;

ACL终身成就奖,2002;

David Rumelhart奖,2003;

本杰明·富兰克林计算机与认知科学奖,2005;

……

桃李满天下

Aravind Joshi教授的知名弟子中,Kathleen McKeown,David Chiang,以及Liang Huang等都是其博士弟子。

Kathleen McKeown,目前是哥伦比亚大学教授、数据科学与工程研究所所长,还是哥大历史上的首位计算机系女性主任;

David Chiang,目前是University of Notre Dame(圣母大学)副教授,2005年ACL最佳论文得主,还是ACL,,NAACL,EACL,IJCNLP,EMNLP,NIPS,ICML,IJCAI,AAAI等顶会论文审稿人;

还有来自中国的弟子梁煌(Liang Huang),目前是俄勒冈州立大学计算机系助理教授,也是NLP、ML领域的知名科学家。

而近年名声大振的MIT CSAI教授Regina Barzilay、耶鲁大学教授Dragomir Radev,都和Aravind Joshi教授有师承关系。

此外,Aravind Joshi教授还有一些中国情缘,除了一些知名华人学生,Aravind Joshi教授还在2010年来到北京COLING大会现场,与国内科学家和研究员进行面对面交流。

2005年被授予本杰明·富兰克林计算机与认知科学奖时,Aravind Joshi教授得到的评价是:他对我们理解语言如何在大脑中作用做出了基本贡献,而且开发的技术让计算机可以有效地处理各种人类语言,这些进步促进了计算机翻译方法革新。

美国东部时间2017年12月31日,Aravind Joshi教授在美去世,享年88岁。

Aravind Joshi教授千古!

欢迎大家关注我们的专栏:量子位 - 知乎专栏

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复"招聘"两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态



via 量子位 - 知乎专栏 http://ift.tt/2DO7f6x
RSS Feed

RSS5

IFTTT

巨头自驾车项目纷纷延期,2018会成为无人驾驶行业艰难爬坡的一年?

编译 | Rik R、Nurhachu Null、王艺

作者 | Aarian Marshal

来源 | WIRED


2014 年对于自动驾驶行业来说,是单纯、无知、又过度乐观的一年。那一年春天,沃尔沃在瑞典提出了自动驾驶汽车项目 Drive Me。


随着该项目几年来的发展,2017 年,沃尔沃高管承诺,公司将为瑞典哥德堡地区的家庭提供 100 辆自动驾驶越野车。在日常驾驶条件下,这些车能够在地方道路上独立行驶至少 30 英里(约 48 公里)。


「这种技术将被称为自动巡航驾驶(Autopilot),司机们不必亲自驾驶,一切交由自动驾驶汽车来完成。」沃尔沃汽车技术主管 Erik Coelingh 说。


现在,在 2017 年的最后几周,沃尔沃将 100 辆自动驾驶越野车的目标向后推迟了四年。


据 Automotive News 报道,该公司现计划在 2021 年之前让 100 名客户试乘其自动驾驶汽车,这些试验对象还将会体验到半自动驾驶功能,该功能将部署到未来任何一辆新的沃尔沃汽车(或特斯拉、凯迪拉克、日产、奔驰)中。



沃尔沃汽车已推迟了其在瑞典哥德堡的 Drive Me 自动驾驶汽车项目


「在自动驾驶汽车的研发过程中,一些我们本以为很难回答的问题,却在试验过程中超乎预期地快速解决了。」沃尔沃汽车自动驾驶项目主管 Marcus Rothoff 告诉连线杂志,「而在一些(我们本以为容易驾驭的)领域,却发现了更多有待探索和解决的问题。」


这些问题多数聚焦于价格,Rothoff 说,公司不愿在还没弄清其传感器的效果前敲定成本,所以沃尔沃还不能决定其自动驾驶汽车购买或使用权的定价。沃尔沃 CEO Hakan Samuelsson 说过,有自动驾驶功能的汽车将在现价基础上提升约 1 万美元。


自动驾驶汽车领域开始降温,沃尔沃的撤退只是离我们最近的一个例子而已。


2012 年,谷歌 CEO Sergey Brin 曾说,不出 5 年,自动驾驶汽车就会成为一种大众选择。然而事实并非如此。


特斯拉的 Enhanced Autopilot 已推迟了近 6 个月,那些为其多花了 3 千美元的客户无疑会对此感到失望。


福特汽车新任 CEO Jim Hackett 最近降低了对自动驾驶服务的期望,其前任曾在 2016 年表示,公司将于 2021 年实现规模化部署。「我们的产品将在那个时间段推向市场,」他在接受 San Francisco Chronicle 采访时说,「但现在,公众在媒体上关于自动驾驶汽车的浪漫想象有点过头了。」


规模化部署进程的放缓并没有挫伤资本市场的热情。美国知名创投研究机构 CB Insights 估计,自驾车初创公司今年共融得超过 30 亿美金,其业务涉及自动驾驶汽车软件、行车安全工具和车辆间通信领域的制造及数据储存和处理。


要想追踪任何重大技术的演进历程,可以参考研究公司 Gartner 的加德纳技术成熟度曲线。首先是「创新触发(innovation trigger)」过程,接着是「技术突破(breakthrough)」,然后很快达到「期望膨胀的峰值(peak of inflated expectations)」,此时开始有资金流入,媒体争相报道。


然后会有期望幻灭的低谷期,此时开始遭遇失败、进度未达预期、融资数额降低。创业者将要直面这些实际挑战和残酷现实。繁华落幕,艰难前行,拨开云雾见光明。自动驾驶汽车似乎正在进入低谷期,欢迎来到最难的部分。


技术难题


「当前的自动驾驶技术水平,就好比计算机技术在上世纪 60 年代的水平,它是新兴的,而非模块化的,它还无法确定该如何组合起各个不同部分。」风险投资公司 Lux Capital 的合伙人 Shahin Farshchi 说,他曾经为通用汽车公司打造过混合动力汽车,并投资了自动驾驶初创公司 Zoox 以及传感器制造商 Aeva。


事实证明,建造一辆自动驾驶汽车并非易事,远远不是把传感器和软件捆在一组轮子上那么简单。在一篇 Medium 的推文中,Bryan Salesky 直言不讳地开列出摆在他们面前的各项困难,他负责管理福特旗下的自动驾驶汽车公司 Argo AI。

他说,首先是传感器方面的障碍。


自动驾驶汽车至少需要三种类型的传感器:1. 激光雷达,能够清晰呈现三维对象;2. 摄像机,获取对象的颜色和细节信息;3. 雷达,能够远距离探测物体及其速度。尤其是激光雷达并不便宜:一辆车的安装费用是 7.5 万美元。


汽车需要从那些昂贵的传感器中获取并整合信息,提取出不同环境下所需要的数据,丢弃不需要的。「要想开发一个可供规模化制造与部署,同时兼具成本效益的系统和可维护的硬件,是极具挑战性的。」Salesky 写道。(Argo AI 在 10 月份收购了一家激光雷达公司 Princeton Lightwave)


Salesky 还提到了其它技术难题,虽然它们都是小问题,但在实际使用中可能会引发大灾难。


自动驾驶汽车必须要能够看到、解释和预测其他人类司机、骑自行车者和行人的行为,甚至还需要与他们进行交流。这些汽车要知道自己是否处于另一辆汽车的盲区,并小心驾驶。它们还需懂得(并看到和听到)为救护车开道。


「如果有人认为,在未来几个月甚至几年内,全自动驾驶汽车将会出现在任一条城市街道上,那么他们要么是不了解其研究现状,要么就是对于安全问题不上心。」Salesky 写道。


泼冷水的不止他一个。「技术开发商开始发现,最后的那 1% 要难于前面的那 99%。」波士顿自驾车公司 Nutonomy CEO Karl Iagnemma 说道,该公司在今年秋天被汽车供应商 Delphi 收购,「与最后那 1% 的工作相比,前面 99% 的工作就像是在公园散步。」


Iagnemma 说,对于更加棘手的特殊情况,一些聪明的公司想出了综合型方案,而不是仅仅用软件来修补一切。但这需要时间。


资金困扰


据 Intel 估计,大约到 2050 年,自动驾驶会给全球经济增加 7 万亿美元,其中仅美国就有 2 万亿,这还不包括这项技术在长途货运和其他领域的影响。


但很奇怪的是,似乎没有人确定如何从这个行业赚钱。Iagnemma 说,「重点已经从单纯的技术研发转移到了产品和商业模式。」


长期以来,自动驾驶汽车领域的从业者们坚信,人们将会首先通过类似出租车服务的形式与自动驾驶打交道。对于直接向消费者出售自动驾驶汽车来说,这项技术还是太昂贵了,而且太依赖于天气状况、地形以及高质量的地图。


但尽管是以出租车的形式落地,从业者们目前仍无暇顾及自动驾驶汽车的用户体验环节。


Waymo 计划明年在亚利桑那州凤凰城启动一项特定区域内的无需司机的乘车服务,并称目前已经找到车辆与乘客交互的解决办法,这类交互包括如何通知汽车乘客的上车地点与目的地等。


但是在 2017 年秋天的一次媒体试乘活动中,该公司并没有让记者体验这一功能。所以,目前公司放出的消息还不能完全相信。


除此之外,自动驾驶汽车还会面临许多其他的问题。比如,当乘客遇到紧急情况或者在车里遇到意外的时候,如何告知车辆?自动驾驶公司如何回收庞大的研发预算?每一次乘坐要花多少钱?抛锚的时候该怎样处理?责任归谁?乘客需要支付多少保险费?


在自动驾驶的进程中,一条明智的前进之路貌似是与竞争对手结盟。


包括 Waymo、GM、Lyft、Uber、Intel,甚至处于消退边缘的汽车租赁公司 Avis,他们都在与潜在的竞争对手结成合作伙伴,为了打造真正的自动驾驶汽车以及支撑它的基础设施,他们正在共享数据和服务。


如果你问一个自动驾驶汽车开发商是否应该单打独斗,即尝试建立传感器、地图、感知、测试能力以及汽车本身,他们都会耸耸肩。


虽然像通用汽车这样的大型汽车制造商似乎认为纵向一体化集成是通往胜利的道路(它于 2016 年 10 月收购了自动驾驶技术公司 Cruise Automation,并于 2017 年 10 月收购了激光雷达公司 Strobe),但瞄准自动驾驶行业中某一单点环节的初创公司仍然相信他们在未来将享有一席之地。


自动驾驶感知公司 DeepScale 的 CEO Forrest Iandola 说:「像 Bridgestone 等传统汽车供应商一样,还是会有很多人为车企提供服务,闷声赚大钱。」


还有一些其他公司希望通过对特定群体的押注在自动驾驶生态中分得一杯羹。自动驾驶接驳车公司 Voyage 已经瞄准了退休群体,MIT 孵化的公司 Optimus Ride 最近在波士顿郊外一处新开发的社区宣布了一个试点项目,并表示这个项目的目标是为残疾骑士设计驾驶软件。


Optimus Ride 的 CEO Ryan Chin 表示,「现在看来,我们的产品是在为不健全的人提供新的出行方式。但我们认为此举实际上最终会创造一个更加健壮的产品」。


这些瞄准不同人群的自动驾驶公司正在融资,Optimus Ride 刚获得了 1800 万美元的 A 轮融资,至此总融资额已达 2325 万美元。但是在日益拥挤的自动驾驶领域,他们的策略是否行得通呢?


前路——攀爬


总的来说,你不会马上在车道上看到一辆完全自动驾驶的汽车。


如果你不是居住在纽约、旧金山或者凤凰城这样的大城市的一些特殊社区的居民,那么在未来十年内可能你也见不到自动驾驶汽车在你的居住范围内运营。


这些汽车将会出现在特定的、精心策划的地区。如果运气好的话,你可能会碰到一辆自动驾驶出租车,它会告诉你前往它的停车点上车(那是它被允许且是仅有的能停靠的地方),而不是它来找你并在停下来的时候亮起临时停靠信号灯,你可能会与两三位 UberPoo 用户一起分享这次旅程。


这些汽车会让你印象深刻,但是它们并不是完全可靠的。它们不知道如何应付所有的道路状况和天气条件,可能会需要一些人工帮助。举个例子,在众多车企中,Nissan 专注研发远程操控技术,它雇佣远程操作员来操控被卡住或者出故障的自动驾驶汽车。


如果你没有足够多的搭乘自动驾驶便车的经历,那么你有可能在几年中忘记自动驾驶汽车这回事儿。你会和朋友开玩笑,说自驾车的炒作是何等的愚蠢。舆论会转移,新闻将不再报道自动驾驶汽车。然而无论如何,自动驾驶行业仍旧会悄然前进,开发者们会悄悄地处理更为精确的问题。


好消息是,仍然有足够的动力将这个行业从 Gartner 曲线所谓的低谷推向生产力高峰。并不是每个开始了旅程的人都能够爬得上去。但是那些受到重创的并且有点血性的人或许会发现,曲线顶端有大量的钞票在等着他们,自动驾驶的前景是惊人的。


]]> 原文: http://ift.tt/2CyFeQN
RSS Feed

机器知心

IFTTT

入职仅一年,套现5000多万后背刺马斯克搬走 Grok 核心代码库!-InfoQ 每周精要894期

「每周精要」 NO. 894 2025/09/06 头条 HEADLINE 入职仅一年,套现 5000 多万搬走 Grok 核心代码库! 业内专家:拥有菜谱不等于能做出同样的菜 精选 SELECTED AI 公司创始人现跑路迪拜! 80% 收入烧广告、假账骗投资人,微...