【技术】通过梯度下降逆向工程获取食品中不同成分的含量

这是一个外国人突发奇想(xiande danteng),用技术去了解包装食品各种成分含量的记录文章,文末附代码链接。

为了学习新的东西,我产生了一些奇怪的想法并写下这篇文章。这是一个小型的实验,我猜了包装食品中每种成分的不同含量。基于成分表和营养成分标签,我把这个任务表述成一个线性回归问题,以成分百分比作为参数。为了执行优化(梯度下降),我使用了最近很流行的官方推荐的深度学习库,PyTorch。

pytorch链接:http://pytorch.org/

我喜欢下厨,但并不总是有时间做饭。当我做的时候,我试着用一种非常科学的方法。例如,我喜欢简化并解密老奶奶食谱。在这个过程中,我可能必须控制好食物的数据,特别是营养数据(也就是碳水化合物,蛋白质,脂肪,盐等)。

在这个实验中,我试图通过使用大多数包装食品都带有的营养成分表来找到食谱中缺失的成分百分比。我的直觉告诉我,这样有足够的数据尝试会找到实际的配方。

注意:我们当然还有其他方法可以找到成分是什么,但是在这个大家都使用Alchemy的时代,为什么不在这个问题上使用梯度下降呢?

让我们以使用了棕榈油的Nutella为例。

成份如下:

糖、棕榈油、榛子粉、可可、脱脂奶粉、低矿物质乳清、磷脂作为乳化剂、香草精:人造香味剂。

权重

在我的线性回归模型中,参数(权重)是不同成分的克数:

  • w1是100gNutella中糖的量,
  • w2是100gNutella棕榈油的量,
  • 等等…

在某些情况下,一些百分比是已知的。欧洲Nutella就是这种情况,我们知道健康成分(榛子粉,可可等)的数量。在这种情况下,权重被设定为固定值,不可训练。

输入和输出

现在的营养成分标签:

每个营养成分成为训练的观察和例子(x,y)。

我们以全脂肪(Total Fat)成分为例,它产生了一个(x,y)元组。

x是包含每种成分中脂肪百分比的行向量:

  • x1是糖中脂肪的百分比(0%)
  • x2棕榈油中脂肪的百分比(100%)

这些还很简单。但是对于某些成分来说,很难猜测它的构成(比如卵磷脂,lecithin)。对于这个实验,我使用了了美国农业部的营养数据库,其中包含大部分基本成分的信息。

注意:有这个数据库并不意味着万事大吉了,因为营养成分的变化很大(比如榛子粉有不同的品种,你可以选择烘烤加工过的或者没有烘烤过的,可可也可以选择没有加工过的或者低脂的…)

最深的一层神经网络的另一面,y是一个标量,包含最终产品中的脂肪量。这些信息可以很容易地在营养成分表中找到: Nutella每份12克脂肪,或者使用更加文明的营养标识系统:31%(法国)

由于这个标签非常冗长,我们可以得到大约十个(x,y)样本。

训练

当然,在模型中,线性单位没有偏置。在食品配料中没有未知的东西,所有的东西都以总量的权重总和来计算。

在PyTorch中声明所有这些是相对容易的(这是我第一次用它),这个库是简单明了,我想我现在理解为什么那么多人疯狂安利它了。现在,我们可以减少原始的L2损失吗?不,为了它收敛于一个合理的局部最小值,我们必须在模型上设置很多限制条件,比如可可的量不能是负数。

特定领域的约束

  • 质量不能为负(我是认真的)
  • 固定某些权重(当它的百分比已知时)
  • 质量总和必须等于100g
  • 并且,重量要按降序排列(食品成分在包装上也按降序排列)

其中一些约束在更新权重时强制执行,另一些则通过损失函数中的“炼金”技巧来实施。

我用整个数据集(批量梯度下降)来计算每一步的损失函数。结果如下:

成分:糖(50.8%),棕榈油(19.7%),榛子粉(13.0%),可可(7.4%),脱脂奶粉(6.6%),乳化剂(1%*)

(*)乳化剂保持在1%以下(只是一种添加剂)

我承认得到的结果并没有什么令人眼前一亮的点。但我认为,实现的过程往往比结果更重要,希望你喜欢它!

附:花生巧克力成分

我还试图了解著名的Reese花生巧克力杯的成分。

这个任务非常困难,,没有人知道10种不同的成分的比例。

有两种复合成分,每种都有自己的成分列表:牛奶巧克力涂层和花生酱填充物。

成分:牛奶巧克力(62%)[糖(20.3g),可可脂(16.0g),可可块(6.3g),无脂牛奶(6.3g),乳脂(6.3g),乳糖(6.3g)乳化剂(0.3g)]花生馅(38%)[花生(18.7g),葡萄糖(18.7g),盐(0.7g)]

代码:https://github.com/jctestud/food-reverse-engineering

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能

Top 50机器学习项目实战总结

整理 | 胡永波 根据《纽约时报》的说法,“在硅谷招募机器学习工程师、数据科学家的情形,越来越像NFL选拔职业运动员,没有苛刻的训练很难上场了。”毕竟,高达12...

3575
来自专栏华章科技

再说深度学习是黑匣子,就把这篇文章糊 Ta 脸上

导语:可视化不只是画画那么简单,它或许是我们理解神经网络的世界的方法。PS:标题是作者说的,不是我说的,要打,就打他(逃

1163
来自专栏大数据挖掘DT机器学习

R语言实现:基于GARCH模型的股市危机预警

作者:huozi07 http://blog.csdn.net/huoz07/artile/details/48176587 为防范股票市场上的不确定性和风险,...

6227
来自专栏AI2ML人工智能to机器学习

随机眼里的临界

以前,来自清华的师兄给我讲过一句话, 叫随机过程随机过, 实变函数学十遍。 至今印象深刻。 我想说的是, 一遇概率脑子绝对不够用~~~

721
来自专栏yw的数据分析

R语言各种假设检验实例整理(常用)

一、正态分布参数检验 例1. 某种原件的寿命X(以小时计)服从正态分布N(μ, σ)其中μ, σ2均未知。现测得16只元件的寿命如下:           ...

6434
来自专栏量化投资与机器学习

【最新】2018第二季度因子收益报告系列一(US)

Style Analytics是一家面向投资专业人士的独立全球软件提供商。Style Analytics之前被称为Style Research,拥有超过20年的...

632
来自专栏码洞

水塘抽样与阶层固化

简单抽样算法就是从固定的n个元素里随机选出k个元素,这样每个元素被选的概率都是平等的k/n。简单抽样是最简单的抽样算法,同样也是使用最为普遍的算法。

822
来自专栏智能算法

数据分析小实验(下)

目录 一、数据准备 二、缺失值处理 三、清洗数据 四、聚类分析 五、结果评估与分析 三、清洗数据 对catego...

2987
来自专栏我爱编程

航空公司客户价值分析

项目目标 借助航空公司客户数据,对客户进行分类 对不同的客户类别进行特征分析,比较不同类别客户的客户价值 对不同价值的客户类别提供个性化服务,制定相应的营销策略...

4405
来自专栏阮一峰的网络日志

蒙特卡罗方法入门

本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method)。 ? 一、概述 蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,...

3736

扫码关注云+社区