应用金融机器学习进展中的两个想法
寻找金融中的结构突变和测量熵
当我不调整我的足球博彩模式时,我会涉足金融。最近,我被这本的书《金融机器学习的进步》(AFML)迷住了——作者将学术严谨与实际执行相结合。这不是一个容易的阅读——我不得不重读几遍章节和参考文献,才能真正理解他在说什么,但这是非常值得的。
与此同时,我偶然发现了这个由 WorldQuant 发起的在线交易挑战。起初,我感到不快,因为你必须用他们的专有语言而不是 Python 来编码,但当我使用这个平台时,我发现它非常容易掌握,并允许我专注于想法的产生和执行,而不用担心 Python 包和环境设置。
我将介绍 AFML 的两个特征提取思想,他讲述了如何使用结构突变和熵来提取特征。
**更新:**我的团队进入了新加坡的全国总决赛!在此处找到幻灯片中涵盖战略的部分。
1.结构突变
当将机器学习应用于金融时,人们通常首先想到的是预测未来,通常是资产的未来价格。但是我们也可以用它来预测某些策略会更有效的情况。结构性断裂就是这样一个例子。
一个结构性的突变代表了一个制度的改变,意味着观察到的新价格不属于迄今为止价格序列的原始分布。破裂可能表明有气泡形成。在休息期间,会有意想不到的机会——市场参与者争相适应新的规范,因此某些策略可能会更有效。
我通过“累积和”测试计算结构突变,即测量跨越阈值的累积噪声,这意味着一个突变。Chu、Stinchcombe 和 White[1]描述了一种计算对数价格偏离的简单方法;我使用下面的 WorldQuant 平台实现了一个这样的迭代。
snt: Test Statistic; crit: Critical Value
2.使用峰度近似熵
熵最初用于热力学,作为不可逆热损失的量度[2]。信息论之父克劳德·香农(Claude Shannon)将这一概念应用于信息熵[3],信息熵是一种基于概率的信息包含多少价值的量度——概率越低,信息含量越高,反之亦然。
那么这和市场有什么关系呢?一些人将市场效率与熵联系起来[4],例如,当价格序列具有高熵时,它具有低冗余和高信息含量,因此不存在套利机会。在低熵或低效率时期,可能会形成泡沫。如果我们能测量价格序列的信息熵,我们就能创造出在高熵或低熵时期更有效的策略。
在我们测量熵之前,我们必须对我们的返回序列进行编码。我们使用收益序列而不是价格序列,是因为需要平稳性——《AFML》的作者着重强调了一个细微差别的价格序列以保持记忆——我很快就会尝试这种方法。
对 return 序列进行编码后,一个简单的方法是计算表示 price 序列所需的唯一位的数量,本质上是创建一个字典。熵也是压缩的一种度量,如果需要很多比特来解释一个价格序列,价格序列的熵就越高。
如果没有 Python 的灵活性,实际编码和计算熵是相当困难的,所以我在平台上使用峰度间接地实现了它。
峰度是对分布尾部有多厚的一种度量。峰度越高,越多的值以平均值为中心。如果我们对一只股票的价格序列进行编码,峰度较高的序列可能熵值较低。
Source: outsmartingthemarkets.com
请注意,下面的峰度公式测量的是超额峰度,因此如果您正在从头开始计算峰度,您将需要减去 3,这是一个正态分布的峰度。
with 2 lines of code, I can implement a kurtosis check over any time period!
现在你已经学会了从价格序列中提取特征的两种方法,你可以想出在结构突变或高/低熵时期有效的创造性策略。
你也读过《AFML》吗?你有什么想法可以让我的执行变得更好吗?或者你想看看书中的其他章节是如何执行的吗?请在下面的评论中告诉我。
参考
[1]朱家祥(1996),斯廷奇科姆,赫伯特·怀特.监测结构变化。
[2]克劳修斯研究报告(1870 年)第十六卷。适用于热的一个力学定理。伦敦、爱丁堡和都柏林哲学杂志和科学杂志 40:122–127。DOI: 10.1080/147864470 08640370。
[3] Shannon CE (1948)一种数学理论的交流。贝尔系统技术杂志 27:379–423。DOI:10.1002/j . 1538–7305.1948 . TB 00917 . x
[4]古尔科,L. (1999 年)。熵市场假说。国际理论应用金融杂志,2,293–329。
人工智能如何工作:两个主要的直觉
Photo by Franck V. on Unsplash
人工智能(AI)可能是一个真正理解起来颇具挑战性的话题,尤其是对于缺乏该领域深厚学术背景的企业经理、企业家和投资者来说。他们可能会本能地感觉到人工智能的巨大潜力——好莱坞制作的所有科幻电影和电视节目可能都在这方面发挥了作用——但他们经常会问,我应该如何看待人工智能?AI 实际上是如何工作的?
下面这篇文章通过展示人工智能的两种广泛且相当主流的直觉——认知的和统计的——来解决这个问题。尽管该领域相对分散,人工智能从业者背景各异,但认知和统计直觉似乎反映了当今接近人工智能的方式。如果你能掌握其中一个或两个直觉,那么你将更好地作为商业利益相关者有意义地参与围绕人工智能的讨论,以及建立和投资人工智能机会。
认知直觉
想想你上一次不得不为多项选择题考试而学习的时候。图 1 显示了这种问题的一个非常简单的例子。
Fig. 1: Multiple Choice Question
如果你幸运的话,你可能有机会使用过去考试的题库来练习。如果你像我一样,你可能会反复练习这些问题几次,希望每一次都越来越好。
这本质上也是人工智能如何工作的认知直觉。它强调学习的概念,并把它与人类认知相提并论。类似于学生处理过去测试中的样本问题,人工智能使用过去的数据来建立对现实世界越来越准确的理解(或模型)。特别地,你和 AI 都做以下事情:
- **用数据训练:**你解决的选择题越多,你就能更好地完成任务。当然,通过这样做,你通常只会在手头的特定任务上做得更好。例如,如果你一直在准备生物考试,你不太可能提高历史考试的成绩。AI 也是一样。
- **通过试错来学习:**你想要最大化奖励(通过答对和通过测试)并避免惩罚(减分)。你也可以这样看待 AI 学习;它因正确的预测而受到奖励,因错误的预测而受到惩罚。随着时间的推移,人工智能会调整自己的行为,减少错误,实现回报最大化。
- 简化现实:为了让学习任务变得简单一点,你可以使用简单的试探法、捷径或其他技巧来提高你的准确性。例如,你可以把相似的概念分成几组,或者使用记忆术来帮助你更好地回忆主题;所有这些都可以帮助你得到正确的答案,而不必仔细考虑问题。同样,人工智能也依赖于现实世界的简化模型来对环境做出快速反应。想象一下自动驾驶汽车在路上绕过障碍物,甚至你的手机使用面部识别解锁屏幕——检测不需要完美,只要足够接近现实就行。
统计直觉
早在高中,后来在大学,我记得通过散点图上绘制的点绘制最佳拟合线。图 2 示出了一个简单的例子,其中目的显然是画一条尽可能靠近图上尽可能多的点的直线。
Fig. 2: Best-Fit Line
有了对最佳拟合线的基本理解,你就已经能够理解人工智能是如何工作的了。这是因为人工智能建立在统计概念的基础上,以开发关于世界的智能思维方式——这也是人工智能的统计直觉的基础。事实上,仅仅从图 2 中的图表,我们就可以开始理解一些对人工智能来说是基础的概念:
- **揭示关系:**人工智能就是要揭示数据中不同变量之间非常复杂的关系。例如,图 2 中的最佳拟合线描述了变量 x 和 y 之间可能的(并且非常简单的)线性关系。关系也可以是非线性的(例如,二次、正弦等。)并且跨越两个以上的维度。如果这种关系可以用数学来表示,那么它可能是人工智能的公平游戏。
- **内插和外插:**这与填充数据中的空白有关,例如预测尚未绘制在图上的 x 的值的 y 的值(反之亦然)。如果缺失数据在我们当前数据样本的范围内,那么我们就谈插值。如果缺失或未知数据超出了我们的数据样本范围,那么我们就要考虑外推。
- **检测异常:**人工智能的几个高影响力用例与检测数据中的异常值或异常有关。例如,在制造业,生产过程依赖于设备的稳定性和一致性;人工智能越来越多地用于促进“预测性维护”(例如,通过监控设备的健康状态并采取行动),以预先防止设备性能下降,从而减少生产线上的停机时间。因此,发现异常并思考导致异常的原因(例如,通过根本原因分析)是人工智能的关键问题。
- **理解欠拟合和过拟合问题:**x和 y 之间的关系应该适合已知的以及未知的/新的数据。例如,图 2 中的线可能适合当前的数据样本,但是如果随着 x 变大, x 和 y 之间的关系发生变化,该怎么办?就我们所知,最佳拟合线的斜率可能与我们当前数据样本中的相同,但斜率也可能降低,甚至可能呈现下降趋势。拟合不足意味着人工智能揭示的统计关系仅粗略地拟合了数据(并且它可能没有足够好地拟合数据),而过度拟合意味着该关系可能太好地拟合了可用的数据样本(并且可能与我们尚未看到的数据相去甚远)。在这里实现正确的平衡是人工智能的一个关键挑战。
包裹
很难理解人工智能。尽管已经存在了近一个世纪,但其固有的复杂性让人工智能感觉像是一个新生领域,仍然更像是科幻小说而不是现实。企业经理、企业家和投资者可以本能地感觉到,人工智能是——或将很快成为——一件大事,但这项技术仍然经常让人感觉像一个黑匣子。
为了打开这个黑匣子,并揭示更多关于人工智能实际上如何工作的信息,根据上面提出的人工智能的两个主要直觉来思考会有所帮助。认知直觉是从人类认知和学习的角度来看待人工智能的;用我们自己的认知做类比,可以更容易把握 AI 是如何工作的。同时,统计直觉通过数学关系的透镜看待人工智能;这种直觉是关于发现、描述和优化感兴趣的结果变量(即 y 变量)和可能的预测变量(即 x 变量)之间复杂且看似隐藏的关系。综合起来,认知和统计直觉为人工智能如何在引擎盖下工作提供了一个相当全面的画面。
最后,理解人工智能的这两个主要直觉也与今天积极招聘数据科学家和其他人工智能专业人员的人高度相关。你会注意到,大多数候选人主要通过认知或统计的观点来理解人工智能。比如有经济学和数学(当然还有统计学)背景的考生,倾向于从统计学的世界过渡到 AI;一个恰当的例子是,我采访的一位担任数据科学职位的前经济学家说,人工智能基本上只是“类固醇统计”。同时,有计算机科学或机械工程背景的候选人,可能有自动化和机器人方面的经验;对于这些候选人来说,向人工智能的跳跃往往是思维的转变,从基于规则的确定性机器转向更“智能”的非确定性机器,这些机器可以以适应的方式与环境互动。可以说,为认知和统计直觉招募人才可以带来更全面、更有效的人工智能团队。
无需深度学习的小规模不平衡数据集情感分析方法
让我们让 logreg 再次变得伟大!
介绍
现在有很多用于 NLP 的预训练网络,它们是 SOTA,并且击败了所有基准:BERT、XLNet、RoBERTa、ERNIE…它们被成功地应用于各种数据集,即使在数据很少的情况下。
在 7 月底(2019 年 7 月 23 日–2019 年 7 月 28 日),有一个关于分析 Vidhya 的小型在线黑客马拉松,他们让参与者对药物评论进行感性分析。这很复杂,原因有几个:
- 只有 5279 个样本在训练中,有 3 类(阴性、中性、阳性)不平衡;
- 一些标签似乎是不正确的,这种情况有时会发生在人工标注文本的时候;
- 有些课文很短,有些很长。在某些情况下,评论不仅包含评论本身,还包含人们回答的评论的引用;
- 另一个更有趣的问题是:一般来说,评论可能是积极的,但对一种药物有负面情绪(以及任何其他对情绪);
一方面,如果情况复杂,需要对背景有深刻的理解,深度学习模型应该可以很好地工作;另一方面,我们只有几千个样本,这似乎不足以进行深度学习。
剧透:据我所知,winners 对 BERT 和 XLnet 进行了微调,但没有共享代码,具体的我就说不出来了。
我知道我不能在这个比赛上花太多时间,所以我决定尝试普通的方法(单词袋和逻辑回归),看看他们能走多远。
排行榜可在此处获得(指标为 f1-macro):https://data hack . analyticsvidhya . com/contest/innoplexus-online-hiring-hackathon/PVT _ lb
我以 0.5274 的分数获得了第 21 名(第一名的分数为 0.6634)。我还提交了一份得分为 0.5525 的作品,这将使我获得第 12 名,但我没有选择它😞
数据概述
在任何项目的开始,我总是从 EDA 开始。所以我们来看看数据。我们有一些唯一的 id,评论的文本,药物的名称和情绪(1 是负面的,2 是中性的,0 是正面的)。
人们通常会写下他们的疾病、症状和药物。
训练和测试数据集中的药物有所重叠,但并不完全重叠,有些药物只出现在一个数据集中。
正如我在开始时所写的,大多数文本都很短,但也有一些很长的文本,可能是因为错误而出现在这里。
设置基线
写一个基线通常是一个好主意,它将在以后用作参考,并确保一切正常工作。
主要步骤如下:
- 处理数据,为建模做准备;
- 建立模型;
- 执行验证(可以与训练模型同时进行);
基本的方法是跳过任何文本预处理,使用文本矢量器。我使用 NLTK 的 TweetTokenizer,因为它通常比默认的 sklearn tokenizer 更好。它可以提取表情符号和许多其他有用的令牌。而且使用 n 元单词比单词更好。
我们可以直接使用sentiment
特征作为目标,因为它已经是数值,并且从 0 开始。
tokenizer = TweetTokenizer()
vectorizer = TfidfVectorizer(ngram_range=(1, 3), tokenizer=tokenizer.tokenize)
full_text = list(train['text'].values) + list(test['text'].values)
vectorizer.fit(full_text)
train_vectorized = vectorizer.transform(train['text'])
test_vectorized = vectorizer.transform(test['text'])
y = train['sentiment']
我们有一个多类分类问题。有两种主要的方法:为每个类或其他类建立二元分类器,或者为每对类建立二元分类器。我更喜欢第一种方法,并将它与逻辑回归一起使用。
logreg = LogisticRegression(class_weight='balanced')
ovr = OneVsRestClassifier(logreg)
现在有必要建立一种方法来检查我们模型的质量。我们可以简单地分割训练数据,一部分训练模型,另一部分检查质量。但是我更喜欢使用交叉验证。这样我们训练了 N 个模型,验证了 N 次,并且对模型的质量有了更好的度量。因此,我在我们的模型中使用了cross_val_score
函数,使用了f1_macro
指标,因此它将跟随排行榜分数,并定义简单的 3 倍分割。
scores = cross_val_score(ovr, train_vectorized, y, scoring='f1_macro', n_jobs=-1, cv=3)
print('Cross-validation mean f1_score {0:.2f}%, std {1:.2f}.'.format(np.mean(scores), np.std(scores)))
交叉验证的得分是 0.4580。现在我们可以对测试数据进行预测,生成提交文件并提交。
pred = ovr.predict_proba(test_vectorized)
sub['sentiment'] = pred.argmax(1)
sub.to_csv('sub.csv', index=False)
结果是 0.4499。这是一个好的开始,并且表明我们的验证方案足够好(具有相似的分数)。
改变超参数。第一步。
让我们努力提高分数。第一步是尝试改变预处理步骤。我使用带有 1-3 个 ngrams 和单词的TfidfVectorizer
作为标记。有许多可能的方法来处理文本数据:
- 干净的文本。这可能包括将缩写改为完整的单词,删除数字/标点符号/特殊符号,纠正拼写错误等等;
- 词汇化或词干化以减少独特单词的数量;
- 使用字母/符号作为标记(相对于使用单词);
- 许多其他想法;
作为第一个实验,我将TfidfVectorizer
参数改为TfidfVectorizer(ngram_range=(1, 5), analyzer='char'
。这使我的交叉验证分数增加到 0.4849,并将公共排行榜上的分数提高到 0.4624。对于改变一行代码来说,这是一个很好的改进,是吗?
下一个想法:我们可以同时使用单词和字符标记!我们简单地连接矩阵:
vectorizer = TfidfVectorizer(ngram_range=(1, 3), tokenizer=tokenizer.tokenize, stop_words='english')
full_text = list(train['text'].values) + list(test['text'].values)
vectorizer.fit(full_text)
train_vectorized = vectorizer.transform(train['text'])
test_vectorized = vectorizer.transform(test['text'])vectorizer1 = TfidfVectorizer(ngram_range=(1, 5), analyzer='char')
full_text = list(train['text'].values) + list(test['text'].values)
vectorizer1.fit(full_text)
train_vectorized1 = vectorizer1.transform(train['text'])
test_vectorized1 = vectorizer1.transform(test['text'])train_matrix = hstack((train_vectorized, train_vectorized1))
test_matrix = hstack((test_vectorized, test_vectorized1))
这给了我 0.4930 的交叉验证分数和 0.4820 的排行榜。
使用文本
正如我在开头所写的——课文包含了大量的信息,但并不是所有的信息都是有用的。人们可以引用其他文本,写长篇故事,比较几种药物等等。
几次尝试之后,我做了以下事情:
train['new_text'] = train.apply(lambda row: ' '.join([i for i in row.text.lower().split('.') if row.drug in i]), axis=1)
现在我们有了新的文本,其中只包含提到相关药物的句子。在此之后,我调整了超参数,并以这个矢量器结束:
TfidfVectorizer(ngram_range=(1, 3), max_df=0.75, min_df=10, sublinear_tf=True)
这在交叉验证中得到 0.5206 分,在公共排行榜中得到 0.5279 分。是我选择的提交让我在排行榜上获得了第 21 名。
模型口译
了解模型预测的内容和方式通常是一个好主意,这可以带来一些见解,从而改进我们的模型。
ELI5 可以这样解释我们的模型并显示预测:
红色单词意味着这个单词减少了这个类的概率,绿色单词增加了这个类的概率。
一个更好的解决方案
我尝试了很多东西来提高分数:不同的模型(像 SGD),超参数优化,文本清洗,欠采样,半监督学习和其他东西。让我们看看我的最佳解决方案是如何创建的。
- 更好的文本预处理
清理文本对我不起作用,但我能够改进我缩短文本的方法。现在我不仅用提到药物的那句话,还用下一句话——我觉得人们第一次提到药物后,一般会写点别的。我也只取前 10 个句子:大部分文本都在这个范围内,但也有一些巨大的文本,这会使训练变得更糟。
def get_text(row):
splitted_text = row.text.lower().split('.')
indices = [splitted_text.index(j) for j in [i for i in splitted_text if row.drug in i]]
full_indices = []
for i in indices:
full_indices.append(i)
if i < len(splitted_text) -1:
full_indices.append(i + 1)
full_indices = list(set(full_indices))
full_text = []
for i in full_indices:
full_text.append(splitted_text[i])
return ' '.join(full_text[-10:])
- 超参数优化
超参数优化总是很重要。Sklearn API 允许使用方便的语法构建管道并优化它们:
combined_features = FeatureUnion([('tfidf', TfidfVectorizer(ngram_range=(1, 3))),
('tfidf_char', TfidfVectorizer(ngram_range=(1, 3), analyzer='char'))])
pipeline = Pipeline([("features", combined_features),
('clf', OneVsRestClassifier(LogisticRegression(class_weight='balanced')))])parameters = {
'features__tfidf__max_df': (0.3, 0.75),
'features__tfidf_char__max_df': (0.3, 0.75),
'clf__estimator__C': (1.0, 10.0)
}
grid_search = GridSearchCV(pipeline, parameters, cv=folds,
n_jobs=-1, verbose=1, scoring='f1_macro')
grid_search.fit(train['new_text'], train['sentiment'])
这样,我们可以优化两个矢量器和“OneVsRestClassifier”中的逻辑回归模型的参数。
- 欠采样
我已经决定,可能是阶级不平衡太严重了,应该对此采取一些措施。有许多方法可以处理它:欠采样,过采样,SMOTE,改变类不平衡。你可以注意到我使用了平衡类权重的逻辑回归,但是这还不够。经过几次尝试,我决定做一个简单的欠采样,随机抽取 2000 个中性类样本。
- 半监督学习
这个想法很简单:在我们训练了我们的模型之后,它应该给出很好的预测(嗯,至少我们希望如此:),大多数有信心的预测应该是正确的,或者至少是大部分正确的。我选取了 1000 个最佳预测,并将它们添加到训练数据集中。在增加的数据集上训练了一个新模型后,我在公开排行榜上得到了 0.5169。这个提交在私人排行榜上的价值是 0.5525,但我没有足够的信任去选择它。
结论
一方面,使用更传统的 ML 方法可能获得高结果,另一方面,现在这些方法不足以击败使用预训练模型的深度学习。这是否意味着更简单的模型没有用武之地?我认为,有时在商业中使用逻辑回归可能是合理的:它建立起来更快,更容易解释,需要的资源更少。然而,从长远来看,使用深度学习是一种成功的方式。
用 Hinton 胶囊网络探讨等方差问题
看看这个:
现在看这个:
即使你从未去过月球,你也可能认出上面图像的主体是美国宇航局的月球漫游车,或者至少是同一辆车在稍微不同的方向上的两个实例。您可能有一个直观的想法,知道如何操纵一个图像的视点来近似另一个图像的视图。这种认知转换对人类来说是毫不费力的直觉,但对于没有明确训练示例的卷积神经网络来说却非常困难。
卷积和最大池层的限制
标准的卷积神经网络,顾名思义,是由一系列的卷积运算组成的,这些卷积运算分层次地提取图像特征,如边缘、点和角。每个卷积将图像乘以像素权重的滑动窗口,也称为卷积核,每层中可能有几十到几千个核。通常,我们在每个卷积之间执行合并操作,降低图像维度。池化不仅减小了层的大小(节省了内存),而且提供了一些平移不变性,使得给定的网络可以对图像主题进行分类,而不管它位于图像中的什么位置。然而,这与其说是一个功能,不如说是一个缺陷,因为池化操作混淆了关于图像中某个位置的信息(推动了 U-nets 中 skip 连接的开发),并且除了翻译之外,在处理图像转换方面表现不佳。
具有汇集的 conv 网络中的翻译不变性缺乏对象转换等价性,这是一种更一般化的认知能力,似乎更接近于我们自己理解世界的方法。事实上,conv 网在各种各样的计算机视觉任务中表现相当好,这掩盖了这个缺点。考虑 MNIST 手写数字数据集的经典例子。按照今天的标准,LeNet-5 是一个相对较浅和简单的 conv 网络设计,它很快学会正确识别测试数据集中 98%的数字。
Test predicted: seven two one zero four one four nine Test groundTruth: seven two one zero four one four nine Accuracy of the network on the 10000 test images: 98.68 %
然而,对测试图像进行简单的 35 度旋转,测试性能会急剧下降。
Test predicted: four two one zero four one four two Test groundTruth: seven two one zero four one four nine LeNet 5 accuracy on 10000 (rotated) test images: 76.05 %
所谓的“胶囊网络”在处理旋转数据方面做得更好:
Test predicted: nine zero one two three four five six Test groundTruth: seven two one zero four one four nine Accuracy of the network on the 10000 (rotated) test images: 84.09 %
缓解该问题的标准方法是数据扩充,即添加旋转、镜像、扭曲等。综合放大数据集以覆盖可能的示例的更大分布。这提高了给定视觉任务的性能,但它显然是一个杂牌,正如他们所说的“智力上不令人满意”
多年来 Geoffrey Hinton 一直直言不讳地表示他不喜欢汇集操作,并一直试图用一种更普遍的等方差来取代汇集的偶然平移不变性,他称之为“胶囊”,这是一种通过将卷积提取的特征重塑为多维向量来创建的场景内容的表示。胶囊网络的概念随着 conv 网络的兴起而发展,如将自动编码器(2011) 转变为用于训练胶囊的动态路由方法(2017) ,以及最近更新的称为期望最大化(2018) 的训练算法。
胶囊来拯救?
在胶囊网络中,每个向量学习表示图像的某些方面,例如形状图元,向量长度对应于对象在给定点存在的概率,向量的方向描述对象的特征。在 2017 年的实现中,第一层胶囊每个都试图通过动态路由来预测下一层胶囊的正确概率(例如,在人脸检测 CapsNet 中,“眼睛”和“鼻子”胶囊值将各自对下一层中每个点的“人脸”胶囊的预测有贡献)。考虑 2D 胶囊向量检测构成卡通门口的多边形的简化示例。这些胶囊代表两种形状(方块和四分之一圆)的存在和方向,它们将一起尝试预测下一个胶囊层中的正确分类,该胶囊层学习检测正确定向的门口。
而在 conv 网中,仅仅正确特征的存在(在训练数据中表示的方向上)就足以触发分类,而不管它们彼此之间的空间关系,胶囊向量都必须非常一致,以从其部分预测整体。我们还应该注意到胶囊一次只能检测给定对象的一个实例,因此一堆块将无法区分,并且 CapsNet 模型可能会因同一类型的重叠部分而混淆。这个缺点经常被比作人类感知中的拥挤。
教程部分:针对旋转 MNIST 分类,训练和测试 LeNet5 与动态路由 CapsNet
比谈论胶囊更好的是修补它们。为了简单起见,我们将使用流行的 MNIST 手写数字数据集。本节中的代码为在 5 层 LeNet5 conv 网络中熟悉的数据集和机器学习模型的上下文中理解 CapsNets 提供了可破解的基础。在对 CapsNet 在 MNIST 的表现有了一个大致的了解之后,我们建议增加不同的训练数据扩充例程,以了解每个模型在学习各种转换方面的表现。
首先,我们将使用 PyTorch 的转换库定义我们想要处理的数据集和我们需要的预处理。
import torch import torchvision import torchvision.transforms as transforms import numpy as np import matplotlib.pyplot as plt import time import torch.nn as nn import torch.nn.functional as F import torch.optim as optim #Download dataset (if necessary) and define test set transformation batch_size = 8 degrees= 15 transform_normal = transforms.Compose([torchvision.transforms.RandomAffine(0, translate=(0.0714,0.0714)),\ transforms.ToTensor(),\ transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) transform_rotate = transforms.Compose([torchvision.transforms.RandomRotation([degrees,degrees+1e-7],\ resample=False,\ expand=False, center=None),\ transforms.ToTensor(),\ transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) train = torchvision.datasets.MNIST(root='./data', train=True,download=True,transform=transform_normal) test = torchvision.datasets.MNIST(root='./data', train=False,download=True,transform=transform_rotate) test_norot = torchvision.datasets.MNIST(root='./data', train=False,download=True,transform=transform_normal) #Data iterator definitions train_loader = torch.utils.data.DataLoader(train, batch_size=batch_size,shuffle=True) test_loader = torch.utils.data.DataLoader(test, batch_size=batch_size,shuffle=False) test_loader_norot = torch.utils.data.DataLoader(test_norot, batch_size=batch_size,shuffle=False) #Define class labels classes = ("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten")
定义我们的 CNN: LeNet5
我们将从在 PyTorch 中实现一个名为 LeNet5 的小型卷积神经网络开始。该模型仅在几个训练时期后就为我们提供了 90%以上的测试集准确度,并且仅由 2 个卷积层和 3 个全连接层组成。
#define LeNet5 Conv-net architecture class lenet5(nn.Module): def __init__(self): super(lenet5, self).__init__() in_channels = 1 conv0_channels = 6 conv1_channels = 16 kernel_size = 5 pool_size = 2 pool_stride = 2 h_in = 256 h2 = 120 h3 = 84 classes = 10 self.conv0 = nn.Conv2d(in_channels, conv0_channels, kernel_size) self.pool = nn.AvgPool2d(pool_size, pool_stride) self.conv1 = nn.Conv2d(conv0_channels, conv1_channels, kernel_size) self.fc2 = nn.Linear(h_in, h2) self.fc3 = nn.Linear(h2, h3) self.fc4 = nn.Linear(h3, classes) def forward(self, x): h_in = 256 x = self.pool(F.relu(self.conv0(x))) x = self.pool(F.relu(self.conv1(x))) x = x.view(-1, h_in) x = F.relu(self.fc2(x)) x = F.relu(self.fc3(x)) x = self.fc4(x) return x def imshow(img,my_string=None): #Helper function for visualizing digits img = img / 2 + 0.5 # unnormalize npimg = img.numpy() plt.imshow(np.transpose(npimg, (1, 2, 0))) if(my_string is not None): plt.title(my_string) plt.show()
LeNet5 的培训和测试程序
我们将使用 Adam 优化来最小化训练期间的交叉熵误差。同样,可以通过 PyTorch 轻松访问该功能。
def train_lenet5(lenet5,learning_rate=1e-4, epochs=10, try_cuda=True): t0 = time.time() if (try_cuda): if torch.cuda.is_available(): device = torch.device("cuda") else: device = torch.device("cpu") #Define training criterion and optimizer criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(lenet5.parameters(), lr=learning_rate) #Send model to GPU if desired lenet5 = lenet5.to(device) for epoch in range(epochs): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(train_loader, 0): #get inputs inputs, labels = data inputs = inputs.to(device) labels = labels.to(device) #zero the parameter gradients optimizer.zero_grad() #forward pass + back-propagation + update parameters outputs = lenet5(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() #print statistics running_loss += loss.item() if i % 2000 == 1999: # print every 2000 mini-batches print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print("Finished training for %i epochs on device %s took %.2f seconds"%(epochs,device,time.time()-t0)) def test_lenet5(lenet5): #We'll test on the cpu lenet5.to(torch.device("cpu")) #Get training set performance dataiter = iter(train_loader) images, labels = dataiter.next() #print images imshow(torchvision.utils.make_grid(images),"Training Example") pred_prob = lenet5(images) _, predicted = torch.max(pred_prob, 1) #report labels print('Predicted: ', ' '.join('%5s' % classes[predicted[j]] for j in range(batch_size))) print('GroundTruth: ', ' '.join('%5s' % classes[labels[j]] for j in range(batch_size))) #calculate accuracy correct = 0 total = 0 with torch.no_grad(): for data in test_loader_norot: images, labels = data outputs = lenet5(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print("LeNet 5 accuracy on (unrotated) training images: %.2f %%" % (100 * correct / total)) dataiter = iter(test_loader_norot) images, labels = dataiter.next() #print images imshow(torchvision.utils.make_grid(images),"Unrotated Test Data") #get probabilities and predictions pred_prob = lenet5(images) _, predicted = torch.max(pred_prob, 1) print('Test predicted: ', ' '.join('%5s' % classes[predicted[j]] for j in range(batch_size))) print('Test groundTruth: ', ' '.join('%5s' % classes[labels[j]] for j in range(batch_size))) correct = 0 total = 0 with torch.no_grad(): for data in test_loader_norot: images, labels = data outputs = lenet5(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print("LeNet 5 accuracy on 10000 (unrotated) test images: %.2f %%" % (100 * correct / total)) #test with rotation dataiter = iter(test_loader) images, labels = dataiter.next() #print images imshow(torchvision.utils.make_grid(images),"Rotated Test Data") pred_prob = lenet5(images) _, predicted = torch.max(pred_prob, 1) print("Test predicted: ", " ".join("%5s" % classes[predicted[j]] for j in range(batch_size))) print("Test groundTruth: ", " ".join("%5s" % classes[labels[j]] for j in range(batch_size))) correct = 0 total = 0 with torch.no_grad(): for data in test_loader: images, labels = data outputs = lenet5(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print("LeNet 5 accuracy on 10000 (rotated) test images: %.2f %%" % (100 * correct / total)) lenet5_model = lenet5() pre_trained = True # Change this flag to train from scratch if(pre_trained): lenet5_model.load_state_dict(torch.load("./lenet5_trained.pt")) else: #liy: learn-it-yourself pass print("LeNet5 Parameters: \n",lenet5) train_lenet5(lenet5_model,epochs=1) test_lenet5(lenet5_model) #save the model parameters #torch.save(lenet5_model.state_dict(), "./lenet5_trained.pt")#output [1, 2000] loss: 1.135 [1, 4000] loss: 0.521 ... [14, 6000] loss: 0.051
用于训练胶囊网络的动态路由算法在计算上比 conv 网要求更高。如果我们想在合理的时间内完成,我们肯定会想在 GPU 上训练。我们还为那些目前处于 GPU 之间或只想跳过测试的人预先培训了一个 CapsNet。为了训练和测试一个胶囊网络,我们分叉并修改了岩崎健太在 https://github.com/gram-ai/capsule-networks的实现。通过输入(在命令行中)克隆本教程中使用的版本:
git clone [https://github.com/theScinder/capsule_networks_rotated_MNIST.git](https://github.com/theScinder/capsule_networks_rotated_MNIST.git)
之后,您可能希望启动 PyTorch visdom 服务器以实现可视化,方法是输入(在单独的命令行窗口中):
python -m visdom.server
最后,您可以通过在交互式 python 会话(仍在 capsule_networks_rotated_MNIST 目录中)中输入以下代码来训练和测试 CapsNet,或者将其保存为. py 文件以供使用,并通过命令行运行:
python run_capsnet.py
其中 run_capsnet.py 是新保存的脚本文件的名称。
from capsule_network import * from torch.autograd import Variable #change these parameters to train from scratch num_epochs = 0 load_model = True train_and_test_capsnet()#output #parameters: 8215570 WARNING:root:Setting up a new session... time to train CapsNet for 0 epochs = 0.04 seconds Test predicted: seven two one zero four one four nine Test groundTruth: seven two one zero four one four nine Accuracy of the network on the 10000 (unrotated) test images: 99.37 % Test predicted: nine zero one two three four five six Test groundTruth: seven two one zero four one four nine Accuracy of the network on the 10000 (rotated) test images: 92.12 %
结论
胶囊网络提供了卷积神经网络的通用特征提取属性的扩展。通过训练每个初级胶囊来预测下一层胶囊的输出,可以鼓励模型学习识别部分、整体之间的关系以及它们的实例化特征(例如位置和方向)的重要性。在许多方面,这感觉像是识别场景中的对象的更自然的方式,因为方向和其他属性可以作为由胶囊表示的场景对象的参数来学习,并且修改特征可以给我们视点、比例等方面的真实变化。相比之下,卷积激活开始看起来像一个非常粗糙的特征表示。
然而,用于训练的动态路由算法可能非常慢(一个历元可能需要超过 5 分钟,而在相同硬件上 LeNet5 需要 25 秒),并且在实践中,它可能需要一点选择性表示(也称为挑选),以找到顶点网明显优于可比 conv 网的情况。使用 LeNet5 这样的简单 conv 网,数据扩充可以在训练和(旋转)测试 MNIST 数据集上产生超过 98%的准确性,并且基于所需的训练时间而不是模型大小来比较 CapsNets 和 conv 网可能更公平。总的来说,98%和 99%以上的准确率之间的差别可能看起来不大,但就解决问题而言,最重要的是最后几个百分点的误差,而不是学习一种近似的启发式方法。
培训顶网仍有很大的改进空间,高度的兴趣确保他们将得到大量的开发工作。我们很可能会看到顶网以类似于 conv 网的方式获得效用,首先在玩具问题上展示,如 MNIST,然后应用于更相关的领域。caps net 肯定会产生令人兴奋的结果,这是更快的硬件加速器和更好的训练算法/软件库的结合,使“深度 caps net”成为现实。
从 获取的公开领域月球漫游车图片(NASA 生成)https://commons . wikimedia . org/wiki/File:Apollo _ 15 _ Lunar _ Rover _ final _ resting _ place . jpg和https://commons . wikimedia . org/wiki/Category:Lunar _ Roving _ Vehicle #/media/File:Apollo _ 17 _ Lunar _ Rover _ near _ station _ 8 _ AS17-146 艾:
原载于 2019 年 5 月 8 日 https://blog.exxactcorp.comT21*。*
使用神经网络逼近 2019 年奥斯卡投票者的想法
Credit: Disney | ABC Television Group
介绍
提名公布后的一个月里,各大娱乐新闻媒体纷纷发表文章,证明预测奥斯卡奖得主是一项强迫性的运动。我从来没有密切关注过任何颁奖仪式,我一直以为每个被提名者都以大致相等的几率进入这场迷人的混战,而客观上最好的那个类别将获得胜利。不是这样的!事实证明,任何数量的因素都可以影响投票者,可以说,其中大多数因素都可以量化,并由神经网络来消耗。这些因素中的一些是工艺协会奖的获得者,但今年的奥斯卡奖之所以如此有趣,是因为有史以来第一次,他们都选择了授予不同的电影。
简单地说,神经网络是一种机器学习技术,旨在通过获取输入并判断它们的相对重要性来估计一条信息(或输出),从而模仿人脑。以这种方式解决问题背后的理念是,每个问题的某些因素更重要。例如,如果你试图评估一个人是否患有糖尿病,那么他的身体质量指数将是一个比他的年薪更重要的因素。通过在已知输出的大数据集上训练网络,可以确定输入的重要性或权重。下面,我提出了一种利用神经网络预测奥斯卡最佳影片的方法。
放弃
截至 2017 年,该学院拥有 6687 名行业专业人士(根据维基百科),他们都对今年的“最佳影片”提名有无数的个人意见。因此,不可能 100%肯定地说今年的 8 位提名者中哪一位会把桂冠带回家…所以请不要在我预测的这部电影上下注!
收集数据
当然,第一个问题是,有什么样的迹象表明一部电影可以赢得奥斯卡最佳影片奖?幸运的是,我在帝国在线找到了一篇名为【如何预测奥斯卡奖】的文章,这篇文章是好心人提供的。它规定,一部电影要赢得“最佳影片”,需要具备以下条件:
- 这部电影的导演至少需要获得“最佳导演”提名,奥斯卡奖历史上只有四部电影无视这一规则。
- 这部电影需要获得“最佳改编剧本”或“最佳原创剧本”提名。
- 美国演员工会(SAG)与奥斯卡投票者有很大的交集。与“最佳影片”相对应的奖项是“演员在电影中的杰出表现”奖(也被称为“演员工会奖”),根据《帝国》的说法,获得提名对于赢得“最佳影片”来说(几乎)是至关重要的。我说差不多……去年的获奖者水的形状没有获得这个奖项的提名。
- 无论是动画还是外国电影都没有获得过“最佳影片”。这对今年(以及神经网络)有着有趣的影响!)作为墨西哥电影《T2 罗马》(T3),T4 被广泛认为是领跑者(T5)。
- 一部获得 SAG ensemble 奖、美国制片人协会“杰出制片人奖”和美国导演协会“故事片杰出导演奖”的电影可以有把握地获得“最佳影片”(有几个明显的例外)。
这篇文章中另一个有趣的地方是上述每一种预测奥斯卡最佳影片的成功率。影评人选择奖以 60%的准确率领先(然而,他们只是从 1996 年开始运行,所以样本量较低),其次是英国电影电视艺术学院奖的 55%,美国演员工会奖的 50%和金球奖“最佳电影-戏剧”类别的 45%。值得注意的是,金球奖还颁发了一个名为“最佳音乐/喜剧电影”的奖项。《帝国》没有报道这个奖项的成功率。然而,根据维基百科,该奖项(或 1958 年至 1962 年间短暂脱钩的奖项之一)的 12 名获奖者在 72 个奖项中获得了“最佳影片”,命中率为 17%。因此,我打算在预测奥斯卡将颁发“最佳影片”方面胜过广播电影评论家协会的优秀成员——他们颁发了评论家选择奖。
在这篇文章中,我将训练两个神经网络。网络 A 将排除美国制片人协会奖(est。美国演员工会奖(美国东部时间 1989 年)1995)和评论家选择奖(est。1996)并且网络 B 将包括它们。这是因为他们作为一个整体只有 22 年的数据,而奥斯卡、英国电影电视艺术学院、金球奖和美国导演协会(Directors’ Guild of America)都是从(至少)1948 年开始颁奖的,这大约会使数据点的数量增加一倍。
训练网络
做出这样的预测似乎是一个分类问题,有两种可能的结果——最佳影片奖,或者不是。然而,这并没有考虑到在一组精选的数据中只选出一个获胜者的限制,或者实际上的“被提名者”。因此,我认为这可以被视为一个回归问题,其中输出是一个连续变量,它转化为电影是“最佳影片”赢家的概率。然后,我们可以在一组被提名者中做出决定性的选择,选出可能性最大的一个。
前馈网络是第一种神经网络,简而言之,它是节点(或神经元)的有向图,首先接受输入,其中之一可能是“一部电影有多少项提名?”。然后,它将这些输入传递给网络隐藏层中的神经元,这些神经元应用一个激活函数,试图确定每个输入的重要性。最后计算输出值,例如这部电影有 0.2 的机会赢得“最佳影片”。我们可以通过计算网络输出和我们知道的输出之间的差异来衡量网络的成功。使用训练函数来执行训练,目的是最小化预测中的误差,并且尽可能快地训练网络。
为具有特定层数、神经元和最佳训练函数的网络选择一种架构并不是一门精确的科学。选择架构有几种不同的方法,这取决于您的问题有多严重。例如,如果您试图使用神经网络(如引言中所述)来诊断糖尿病,那么您可能希望仔细选择(可能使用遗传算法)一种具有高准确性和诊断糖尿病倾向的架构,而不是让潜在的患者在未诊断的情况下漏网。我的问题绝不是关键问题,所以我选择架构的方法将是不同技术组合的基本网格搜索。
网络 A
在选择训练数据方面,我决定从 1951 年开始,这是第一年颁发金球奖最佳音乐或喜剧电影奖。这给了我从那时到 2015 年的 65 个数据点,不包括独立验证的两年数据。注意,我对网络 A 使用了 12 个输入,如下所示:英国电影电视艺术学院奖“最佳影片”;获得金球奖最佳喜剧/音乐剧提名或奖项;金球奖最佳剧情类电影提名或获奖;这部电影获得的奥斯卡提名总数;奥斯卡最佳导演提名;这部电影的电影剧本获得奥斯卡提名;不管是动画还是外国电影;和美国导演协会奖或提名“故事片杰出导演奖”。
我首先尝试分离出这个问题的最佳训练函数,为此,我创建了许多具有不同训练函数的网络,并控制隐藏层数量(1)和神经元数量(10)的常量变量。然后我每个人训练五次,取他们表现的平均值。我选择多次训练网络,每次训练在优化前使用不同的权重和偏差进行初始化,这意味着每次训练网络都可能得到更好或更差的结果。通过取每次训练表现的平均结果,我可以为这个特定的问题建立最佳的训练函数。对于这个数据集,具有动量训练函数的梯度下降是最佳的。
接下来,我尝试了不同的层数和神经元数的组合。杰夫·希顿在他写的《Java 神经网络导论》中规定,一个神经网络只需一个隐层,输入层(12)和输出层(1)神经元的平均值就可以达到很好的性能。我决定对层的集合{1,2}和神经元的集合{1,3,6,10,12}进行采样,总共十个组合。因此,举例来说,对(2,6)将有两个隐藏层,每个层有六个神经元。我再次对每个不同的网络进行了五次训练,以找到最佳的层/神经元组合,令我颇为不安的是,结果是一个隐藏层有十个神经元——这是我建立最佳训练函数的原始控制变量。真是搪塞!
所以我为这个问题建立了最好的神经网络结构:一个隐藏层;十个神经元;和具有动量训练功能的梯度下降。这种架构在测试集上实现了 79.9%的准确率,在验证集上实现了 78.4%的准确率,总体平均准确率为 79.2%…比评论家选择奖好得多!
网络 B
由于这个网络中考虑的三个颁奖仪式的时间都不长,我只能使用 1996 年以来的数据,这给了我 20 个数据点——比以前少得多。要注意的是,我使用了 18 个输入,这些输入与上面列出的输入完全相同,但增加了以下六个:演员工会提名或“电影演员的杰出表现”奖,评论家选择提名或“最佳影片”奖,以及美国制片人工会提名或“杰出制片人”奖。
为了节省时间,并且考虑到训练数据与网络 A 的输入数据共享三分之二的输入数据,我决定仅使用之前的数据集测试我的前三个架构。这实现了以下目标:
- 一个隐藏层;十个神经元,GDM——准确率 65.2%
- 两个隐藏层;十二个神经元,GDM——49%的准确率
- 三个隐藏层;十个神经元,GDM——58.7%的准确率
因此,再一次,具有 10 个神经元的单个隐藏层是最佳架构,尽管对于这样一个 20 点的精简数据集,我相信结果比更大的数据集更不稳定。例如,在训练时,我两次看到验证集只有目标输出为 0 的数据点,换句话说,它没有“最佳图片”获胜者的数据。因此,我将更加怀疑网络 B 产生的结果。
独立验证
我为自己保留了两年的数据,以独立验证这些网络是否达到了上述精度。对 2016 年和 2017 年最佳影片奖的预测如下表所示:
关键:粗体显示最有可能的赢家,斜体显示第二有可能的赢家
我认为,从这一独立的核查工作中可以得出一些有趣的结论。首先,尽管第二个网络有一半的数据点和六个额外的输入,但在这里似乎网络的估计并没有太大的不同。有趣的是,虽然网络 A 比网络 B 更有信心预测错误的赢家(啦啦地),但它也更有信心预测第二可能的赢家(月光),即最终的赢家。两个网络都正确地确定了 2017 年的获胜者,网络 B 在确定性方面领先于网络 A。最后一点很简单,和 2016 年一样,奥斯卡有时会忽略统计风吹来的方式,给自己最喜欢的电影颁奖!毕竟,如果你知道谁会是赢家,那就没什么看头了。也就是说,我仍然会尝试预测赢家。
今年的冠军将会是…
罗马!
根据这两个神经网络, Roma 已经克服了前进道路上的障碍(这是奥斯卡奖历史上第十部获得“最佳影片”提名的外语片,此前没有获奖),摘得概率桂冠。他们也同意第二大可能的赢家,绿皮书。接下来还会有更多的差异,这可能会引发人们对美国演员工会奖等新设立奖项的影响的质疑。但现在,我屏住呼吸等待,直到 2 月 24 日,看看我是否正确…
任何想进一步了解我是如何得出这些结论的人,都可以查看我的 GitHub 库,里面包含了我所有的资源和脚本。我为此使用的网络训练工具是 MATLAB 的深度学习工具箱。
承认
非常感谢 http://www.ya-shin.com 的维护者,他们提供了截至 2006 年的奥斯卡奖、金球奖奖和英国电影电视艺术学院奖的完整名单。如果没有他们出色的电子表格(仅奥斯卡提名者和获奖者就有 8832 项记录),我可能已经迷失了。
四月版:强化学习
如何建立一个真正的人工智能代理
强化学习(RL)是指面向目标的算法,其中“代理”学习完成一个特定的目标或目的,同时在许多步骤中最大化一组“奖励”。RL 代理人是人们在描述电影中描绘的“人工智能”时经常想到的。RL 代理通常从空白开始,在正确的条件下,当它了解其环境时,可以实现惊人的性能。
当 RL 算法做出错误的决定时,它们会受到惩罚,而当它们做出正确的决定时,它们会受到奖励,因此出现了术语“强化学习”。建立环境,选择合适的算法/策略,设计奖励函数,为实现代理的预期行为提供激励——这些都是使强化学习成为一个迷人而复杂的领域的一些方面。
强化学习的应用在多个行业各不相同,包括机器人、聊天机器人和自动驾驶汽车。大多数强化学习的新生都是通过使用 OpenAI Gym 框架来了解 RL 的。TDS 作者,霍纳塔斯·菲格雷多和维哈尔·鞍马写了关于 OpenAI 和 RL 的优秀文章,让你开始使用 Python 。一旦你在 RL 方面打下了基础,那么看看更复杂的应用程序,比如训练代理打网球或者使用 RL 训练聊天机器人。
— Hamza Bendemra ,编辑助理,致力于数据科学。
强化学习在现实世界中的应用
由 Garychl — 13 分钟读完
虽然卷积神经网络(CNN)和递归神经网络(RNN)因其在计算机视觉(CV)和自然语言处理(NLP)中的应用而对企业变得越来越重要,但强化学习(RL)作为计算神经科学的框架来模拟决策过程似乎被低估了。
OpenAI 健身房从零开始
到霍纳塔斯·菲格雷多 — 10 分钟读完
有很多工作和教程解释了如何使用 OpenAI Gym toolkit,以及如何使用 Keras 和 TensorFlow 来训练使用一些现有 OpenAI Gym 结构的现有环境。然而在本教程中,我将解释如何从头开始创建一个 OpenAI 环境,并在其上训练一个代理。
用 Python 进行强化学习
由维哈尔·鞍马 — 11 分钟阅读
强化是一类机器学习,其中代理通过执行动作来学习如何在环境中行为,从而得出直觉并看到结果。在本文中,您将学习理解和设计一个强化学习问题,并用 Python 来解决。
训练机器人打网球
托马斯·特雷西 — 16 分钟阅读
这篇文章探索了我在 Udacity 的深度强化学习纳米学位的最终项目中的工作。我的目标是帮助其他机器学习(ML)学生和专业人士,他们正处于在强化学习(RL)中建立直觉的早期阶段。
几分钟学会平稳驾驶
由安东宁·拉芬 — 11 分钟阅读
在这篇文章中,我们将看到如何在几分钟内训练一辆自动驾驶赛车,以及如何平稳地控制它。这种基于强化学习(RL)的方法,在这里的模拟(驴车模拟器)中提出,被设计成适用于现实世界。它建立在一家名为 Wayve.ai 的专注于自动驾驶的初创公司的工作基础上。
用图形网络控制机器人
通过或 Rivlin — 9 分钟读取
正如任何对技术感兴趣的人无疑都知道的那样,机器学习正在帮助改变不同行业的许多领域。在过去的几年里,由于深度学习算法,计算机视觉和自然语言处理等事情发生了巨大的变化,这种变化的影响正在渗透到我们的日常生活中。
用深度强化学习训练一个目标导向的聊天机器人(第一部分、第二部分、第三部分、第四部分、第五部分)
通过最大布伦纳 — 10 分钟读取
在这个系列中,我们将学习面向目标的聊天机器人,并用 python 训练一个具有深度强化学习的聊天机器人!一切从零开始!这个系列教程的代码可以在这里找到。
我们也感谢最近加入我们的所有伟大的新作家,马科斯·特雷维索,大卫·康弗,让·克利斯朵夫·b·卢瓦索,莫里茨·基尔希特,卡尔·温梅斯特,卡梅隆·布朗斯坦,阿曼·迪普,雅各布·戴维斯,詹姆斯·迪特尔,扎伊我们邀请你看看他们的简介,看看他们的工作。
APTOS 2019 失明检测
使用人工智能检测糖尿病视网膜病变,在为时已晚之前阻止失明。
Image credits http://medi-whale.com
糖尿病视网膜病变是一种影响眼睛的糖尿病并发症。视网膜光敏组织的血管受损会导致这种并发症。糖尿病视网膜病变(DR)是全球失明的主要原因。全世界大约 2 . 85 亿糖尿病患者中有三分之一有 DR 的迹象。
想象一下,能够在灾难恢复造成问题之前检测到它。早期发现糖尿病视网膜病变可以挽救数百万糖尿病患者的视力,这也是亚太远程眼科学会(APTOS)在 Kaggle 中提出的一个问题的目标。
点击了解更多关于比赛的信息。
我对检测高危患者失明的想法很感兴趣,这也是我试图使用人工智能解决这个问题的动机。APTOS 提供了大量在各种成像条件下拍摄的眼底照相视网膜图像。这些数据是多样的和广泛的。
临床医生对每张图像的糖尿病性视网膜病变的严重程度进行评分,等级为 0-4,其中数字代表并发症的程度,如下所示:
这是一个图像分类问题。
图像分类处理理解图像及其与类别相关的上下文。为了将一组数据分组为不同的类或类别,机器学习算法理解数据和它们被分类到的类之间的关系。
由于深度学习在准确性方面优于不同的预测方法,所以它越来越受欢迎,我决定使用深度学习解决方案来分类这些图像。这里有两个图表描述了传统机器学习和深度学习的区别。
在传统的机器学习技术中,领域专业知识是必要的,因为大多数不同的特征和类别必须被标记。只有在你成功识别了相关特征之后,机器学习算法才能识别模式并给出准确的输出。
深度学习算法与传统的机器学习算法相比具有很大的优势,因为它们以增量的方式从数据中学习高级特征,无需领域专业知识和核心特征提取。特别是对于复杂的问题,如图像分类、自然语言处理和语音识别,需要深度学习算法才能做到准确和精确。
为什么要转学?
深度学习模型需要大量的数据和资源来进行适当的训练。一般来说,数据越多,输出越准确。例如,ImageNet ILSVRC 模型在 2-3 周的时间内跨多个 GPU 对 120 万张图像进行了训练。迁移学习是一种机器学习方法,其中工程师为一项任务开发一个模型,并将其作为第二项任务的模型的起点。
在深度学习中,一种流行的方法是使用预训练的模型作为起点,最后一个全连接层被移除并由自定义的全连接层取代,将原始 CNN 视为新数据集的特征提取器。一旦被替换,最后一个完全连接的层被训练为新数据集的分类器。
为了解决这个问题,我选择了 Inception v3。Inception-v3 是一个卷积神经网络,它在 ImageNet 数据库中的超过一百万张图像上进行训练。因此,该网络学习了各种图像的丰富特征表示。网络的图像输入大小为 299 x 299。
我建立了一个机器学习模型,使用一个名为 S kyl 的端到端机器学习平台来加速疾病检测。我就是这么用的。
创建项目
Skyl 中的一个项目允许你根据你选择的模板来简化你的机器学习项目。因为这个问题是一个影像分类问题,所以我选择了影像分类(多类)模板,并根据我的需求配置了我的项目。
配置数据集
配置数据集意味着定义数据集的外观、内容以及分类值。输入数据集的名称、简短描述和类别值。我将我的数据集命名为:“失明检测数据集”,并将类别命名为无 DR、轻度、中度、重度、增生性 DR。
上传数据
Skyl 提供了许多收集数据的选项,如收集 API、CSV 上传、移动和基于表单的收集。我使用收集 API 选项来上传平台中的数据。
我从 Kaggle 下载了数据,并编写了一个脚本,将数据上传到之前在 Skyl 平台上创建的名为“失明检测数据集”的数据集中。
Skyl 为发现数据偏差提供了数据可视化。有偏见的数据会导致自我实现的预言和灾难性的结果,这是应该避免的。
创建功能集
特征集是数据集的子集,最终用作训练模型的输入。我创建了特征集,并检查了数据是否是类平衡的,以在训练中获得最佳结果。
模特培训
前面说过,我选择迁移学习进行模型训练。我使用 Skyl 的优化算法来训练 ML 模型,这些模型是根据 ML 模板列出的。我选择了’卷积神经网络(CNN) +迁移学习【T1]'作为算法,我通过其训练数据的特征集,历元数为 10,学习率为 0.001,添加模型名称和描述,最后初始化训练。
一旦训练完成,它就会创建一个机器学习模型,列在“模型”下。该模型达到了 72%的准确率——对于 25 分钟内没有工作的情况来说,这已经很高了。您还可以查看模型的培训总结报告。
模型部署
训练结束后,我部署了模型,推理 API 被自动创建。我复制了 API,用它来做预测。
这就是我如何创建一个用于失明检测的深度学习模型。如果你们有任何问题或建议,请在下面的评论区联系我。
想看看我用的平台,这里有链接: https://skyl.ai
通过联系 Skyl 的团队,您可以很容易地获得一个供个人使用的免费帐户。
快乐学习!!
AR 来了,准备卖给你一台吸尘器
这不再仅仅是为了抓口袋妖怪
Credit: Gado Images
昨天,我在地毯上试用了一种地毯清洁剂。我知道,这听起来是有史以来最无聊的一篇文章。但是请原谅我。
有趣的部分来了。地毯清洁器其实不是我的。我没有买它,但它就在我家里。
不,这不是一个关于入店行窃的中篇报道。事实上,我家地板上的地毯清洁剂并不存在。
真实的地方,假的东西
我的地毯上怎么会有假家电?它是由电子商务巨头亚马逊购物应用程序的一个引人注目的新功能放在那里的。该功能被无害地标记为“在我的房间里看。”它允许你从亚马逊调出许多产品的虚拟版本,并在你的真实家中看到它们。
该功能是这样工作的。你选择一件你感兴趣的商品,然后把它加载到你的亚马逊应用程序上。然后你按下“在我房间里看”你的手机切换到相机视图,你把它指向你房间里你想要放置新的假物体的地方。出现一个绿色框,您点击将产品放下。
Moving your phone around allows you to see the virtual object from any angle. Credit: Gado Images
这就是事情变得不可思议的时候。当你四处移动你的手机摄像头时,看起来好像这个产品实际上是坐在你的房间里。你可以走来走去,从各个角度观察它,蹲下来从下面看它,甚至走进一个不同的房间,然后走回来。当你把手机放回你“放”产品的位置时,它仍然会在那里,就好像它一直在你的房间里一样。
现实,但更好
亚马逊的新功能是名为增强现实(AR)的虚拟现实子集的一部分。与试图将你从现实中转移到另一个沉浸式现实中的更传统的虚拟现实系统相比,AR 将现实带到你面前,并将其转化为不同的更好的东西。它正在迅速获得牵引力,部分原因是它不需要传统虚拟现实中笨重、昂贵的眼镜。
Traditional VR is immersive, but requires bulky hardware. Credit: Gado Images.
这项技术的工作原理是分析真实空间,并理解它们的物理参数。然后,它获取一个对象的虚拟 3D 模型,确定它在实际的物理空间中的外观,并虚拟地将该对象绘制进来。
当你四处移动手机时,系统会不断观察你在现实空间中的角度是如何变化的,并更新虚拟物体的位置,使其保持一致。虚拟物体实际上不断被重画,以适应你对空间不断变化的看法,这一切都是为了模拟它只是随意地坐在你的地板上的效果。
现实世界中的 AR
到目前为止,ar 主要应用于游戏等领域。全球现象口袋妖怪 Go 就是一个最好的例子。它使用 AR 和地理定位将虚拟口袋妖怪放置在现实世界的位置,促使一大群人挥舞着他们的手机在你当地的公园里闲逛。
Gotta catch ’em Credit: Gado Images
有了亚马逊这样的应用,AR 就成长起来了。我们知道它的真正目的是卖给你一台吸尘器。
看到一个虚拟的地毯清洁器叠加在我的地毯上真是太棒了。但是,对于亚马逊的新 AR 功能来说,有一些真正有用的应用程序,以及增强其面向零售的使命的应用程序。
一个显而易见的优势是能够看到新设备在空间中的外观和适合度。我用亚马逊回声秀的虚拟版本测试了这一点。通过 AR 功能,我可以将它放在我的厨房柜台上,并环顾四周,看看它与我的其他东西是否合适,它对于空间来说是否太大或太小,等等。
Credit: Gado Images
与我的真实回声秀相比,虚拟看台做得相当好。它大小合适,放置正确,甚至以与真实设备相似的方式反射光线。
The real Echo Show in the same space. Credit: Gado Images.
虽然它很适合查看电子产品,但亚马逊也希望你能把它用于更大的东西。让人们在网上购买像家具这样的大件商品——网站看不见——是一个巨大的挑战。
亚马逊希望,如果你能在你的空间里放置一个新沙发的虚拟副本,并确保它符合你的装饰,你会更倾向于购买它。他们可以避免拥有昂贵的实体展厅的成本。现在,如果他们能模拟你坐在上面的感觉,他们会是金色的…
AR 的未来
今天的 AR 已经非常强大,但它的主要焦点是向现有的真实空间添加东西——无论是地毯吸尘器、口袋妖怪还是沙发。
未来的 AR 将超越这一点,实时无缝地改变你对空间的看法。
Sherwin Williams 已经在他们的 Colorsnap 应用程序中提供了一个版本。你可以打开应用程序,从他们的虚拟油漆样本中选择一种颜色,举起你的家,看到应用程序虚拟地“油漆”你选择的颜色。它并不完美,但它给人一种颜色看起来如何的感觉。同样,和亚马逊一样,它的目标是帮助你在不去实体店的情况下做出购买选择。
随着生成性敌对网络和其他快速改变图像的工具的增长,我相信我们会看到这种增加现实的概念走得更远。
想象一下,一家服装零售商有一个应用程序,你可以在那里打开自拍相机。该应用程序将实时使用 AR,让它看起来像你穿着零售商的任何服装。你甚至可以给每件新衣服拍一张自拍,然后发给朋友帮忙挑选。它就像一个 Snapchat 过滤器,但它可以帮助你购买一件衬衫,而不是让你吐彩虹。
这个概念可能会超越零售,产生更大的影响。美林(Merrill Lynch)等金融公司已经试验了人工老化客户照片的技术。人们希望,如果他们从每月的账单上看到 70 岁的自己,他们会为退休存更多的钱。
但是深入一点呢?有没有一款应用程序可以改变现实,通过展示你在身体残疾时的样子来建立同理心?还是在变性手术后?性别交换已经存在,可以用于这些更有益的目的。
其他技术也可能开始与 AR 更全面地集成。谷歌已经试验了一个增强现实版本的谷歌地图,在这个版本中,巨大的浮动箭头会自动出现在你手机屏幕上的真实世界视图中,当你走到目的地时,给你一个完美的方向感。借助 3D 成像技术,你可以在视频通话期间拍摄某人的实时 3D 视频,并使用 AR 将它们叠加到你的桌子上,就像莱娅公主/R2D2 风格一样。
平视显示器将数据嵌入到你对现实世界的视野中,也越来越受欢迎。在谷歌眼镜等技术的早期失误之后,AR 行业已经成功地将 hud 集成到滑雪眼镜、自行车头盔和高端汽车中。人们对智能眼镜的兴趣甚至有所复苏,尽管没有 Startrek 的外观,而且希望减少非法的更衣室快照。
我的虚拟真空
最后,我买了地毯清洁剂。真的和我在亚马逊应用上看到的假的看起来差不多。
是不是在 AR 看到的让我更有可能去买?我不确定。我认为更传统的因素,比如好评和合理的价格,是更大的激励因素。但在 AR 中看到它是一个考虑它而不是其他模型的理由,这需要我使用我的实际想象力来描绘它们在我的空间中会是什么样子。
虽然 AR 现在主要是一个令人惊叹的功能,但随着手机和可穿戴设备变得越来越强大,它的影响力将会越来越大——我们会花更多的时间粘在它们身上。随着新的图像处理技术的进步,比如 GANs,它们的输出将变得更加身临其境,也更加引人注目。
如果你还没有尝试过 AR,下载一个支持 AR 的应用程序,然后查看一下。而如果那个 app 竟然是 Pokemon Go,不用担心,我不会评判。
构建机器学习管道
现实世界中的数据科学
如何构建可扩展的 ML 系统—第二部分
前言
在开发模型时,数据科学家在一些为统计和机器学习(Python、R 等)量身定制的开发环境中工作,能够在一个“沙盒”环境中训练和测试模型,同时编写相对较少的代码。这对于构建快速上市的交互式原型非常有用——尽管它们不是生产性的低延迟系统!
这是系列文章的第二篇,即“ ”成为数据科学家并不能让你成为软件工程师!’,涵盖了如何构建端到端的可扩展机器学习(ML)管道。
修订本
如何构建可扩展的机器学习系统——第 1/2 部分
towardsdatascience.com](/being-a-data-scientist-does-not-make-you-a-software-engineer-c64081526372)
希望您已经阅读了本系列的第 1 部分,在那里我们介绍了基本的架构风格、设计模式和坚实的原则。
📌TL;DR: 如果你没有读过,让我们重复一下“圣杯”——即一个生产就绪的 ML 系统应该试图解决的问题陈述:
主要目标是建立一个系统,该系统:
减少延迟;
与系统的其他部分集成但松散耦合,例如数据存储、报告、图形用户界面;
▸可以水平和垂直缩放;
?是消息驱动的,即系统通过异步、无阻塞的消息传递进行通信;
针对工作量管理提供高效的计算;
是容错和自愈即故障管理;
支持批量和实时加工。
**🎦场景设置:**至此,你已经了解了软件工程的基本概念,并且已经是一名经验丰富的数据科学家。
事不宜迟,让我们把两个和两个放在一起…
对于每一个 ML 流水线步骤,我将演示如何设计一个生产级架构。我将有意不提及任何特定的技术(除了几次出于演示的目的我举了一些例子)。
**✏️注意:**如果您需要更新 ML 管道步骤,请查看该资源。
ML Pipeline
构建 ML 管道
传统上,管道涉及通宵批处理,即收集数据,通过企业消息总线发送数据,并对其进行处理,以提供预先计算的结果和第二天操作的指导。虽然这在一些行业中行得通,但在其他行业中确实不够,尤其是在 ML 应用中。
下图显示了应用于实时业务问题的 ML 管道,其中功能和预测对时间敏感(例如,网飞的推荐引擎、优步的到达时间估计、LinkedIn 的连接建议、Airbnb 的搜索引擎等)。
Real-Time ML
它由两个明确定义的部分组成:
- 在线模型分析:最上面一行代表应用的操作组件,即模型应用于实时决策制定的地方。
- 离线数据发现:最下面一行表示学习组件,即分析历史数据,以批处理模式创建 ML 模型。
我们现在将采用这个简化的图表并展开其内部工作原理。
— ①:数据摄取
数据收集。
将传入的数据汇集到数据存储中是任何 ML 工作流的第一步。关键的一点是,数据是持久化的,根本不需要进行任何转换,以允许我们拥有原始数据集的不可变记录。数据可以来自各种数据源;或者通过请求(发布/订阅)获得,或者从其他服务流获得。
NoSQL 文档数据库非常适合存储大量快速变化的结构化和/或非结构化数据,因为它们是无模式的。它们还提供分布式、可扩展的复制数据存储。
脱机的
在离线层,数据通过摄取服务流入原始数据存储,这是一个复合编排服务,封装了数据源和持久性。在内部,存储库模式用于与数据服务交互,数据服务反过来与数据存储交互。当数据保存在数据库中时,一个唯一的 batch-id 被分配给数据集,以允许高效的查询和端到端的数据沿袭和可追溯性。
为了提高性能,摄入分布是双重的:
每个数据集都有一个专用的管道,因此它们都是独立和并发处理的,并且
在每个管道内,数据被分区以利用多个服务器内核、处理器甚至服务器。
将数据准备工作横向和纵向分布在多个管道中,可以减少完成工作的总时间。
摄取服务按照计划(每天一次或多次)或按照触发器定期运行:主题将生产者(即数据源)与消费者(在我们的例子中是摄取管道)分离,因此当源数据可用时,生产者系统向代理发布消息,嵌入式通知服务通过触发摄取来响应订阅。通知服务还向代理广播源数据已经成功处理并保存在数据库中。
在线的
在在线层,在线摄取服务是流架构的入口点,因为它通过提供可靠、高吞吐量、低延迟的功能,分离和管理从数据源到处理和存储组件的信息流。它作为企业级的数据总线。数据保存在长期原始数据存储中,但也是到下一个在线流媒体服务的直通层,用于进一步的实时处理。
这里使用的示例技术可以是 Apache Kafka(发布/订阅消息系统)和 Apache Flume(长期数据库的数据收集),但是您还会遇到更多,这取决于您企业的技术堆栈。
— ②:数据准备
数据探索、数据转换和特征工程。
一旦接收到数据,就会生成一个分布式管道来评估数据的状况,即寻找格式差异、异常值、趋势、不正确、缺失或扭曲的数据,并在此过程中纠正任何异常。这一步还包括特征工程过程。特征管道中有三个主要阶段:提取、转换和选择。
Feature Engineering Operations
由于这是 ML 项目中最复杂的部分,引入正确的设计模式是至关重要的,因此就代码组织而言,拥有一个工厂方法来基于一些常见的抽象特性行为生成特性,以及一个策略模式来允许在运行时选择正确的特性是一个明智的方法。特征提取器和转换器的结构都应该考虑到组合和可重用性。
选择特征可以留给呼叫者,或者可以自动进行,例如应用卡方统计测试对每个特征对概念标签的影响进行排序,并在模型训练之前丢弃影响较小的特征。可以定义一系列选择器 API 来实现这一点。无论哪种方式,为了确保用作模型输入和评分的特征的一致性,为每个特征集分配一个唯一的 id**。**
概括地说,数据准备管道应该被组装成一系列不可变的转换,这些转换可以很容易地被组合。这就是测试的重要性和高代码覆盖率成为项目成功的重要因素的地方。
脱机的
在离线层,数据准备服务,由摄取服务的完成触发。它获取原始数据,承担所有特征工程逻辑,并将生成的特征保存在特征数据存储中。
同样的划分也适用于此(即专用管道/并行)。
可选地,来自多个数据源的特征可以被组合,因此“连接/同步”任务被设计为聚集所有中间完成事件并创建这些新的组合特征。最后,通知服务向代理广播这个过程已经完成,并且特性是可用的。
当每个数据准备管道完成时,特征还会被复制到在线特征数据存储中,因此可以低延迟地查询特征以进行实时预测。
在线的
原始数据从摄取管道流入在线数据准备服务。生成的特征存储在内存 在线特征数据存储中,可在预测时以低延迟读取,但也保存在长期特征数据存储中,以备将来训练。此外,可以通过从长期特征数据存储中加载特征来预热存储器中的数据库。
继续前面的技术栈例子,一个常用的流媒体引擎是 Apache Spark。
**🔍离线钻取:**如果我们要钻取离线接收和数据准备服务交互,我们将得到如下内容:
(1) 一个或多个数据生产者向消息代理的指定“源数据可用”主题发布事件,表明数据可供使用。
**(2)**摄取服务在听题目。
一旦接收到相应的事件,它将通过以下方式进行处理: (3) 获取数据并 (4) 将其以原始格式保存在数据存储中。
**(5)**当流程完成时,它会向“提取原始数据”主题引发一个新事件,以通知原始数据已准备就绪。
**(6)**数据准备服务在听题目。
一旦接收到相应的事件,它通过以下方式进行处理: (7) 获取原始数据,准备原始数据并设计新功能,以及 (8) 将功能保存在数据存储中。
**(9)**当流程完成时,它会向“特性已生成”主题引发一个新事件,以通知特性已生成。
Offline Data Ingestion / Preparation Interactions
— ③:数据隔离
拆分数据子集以训练模型,并进一步验证它对新数据的表现。
ML 系统的基本目标是使用基于其模式预测质量的精确模型来预测未经训练的数据。因此,通过将现有标记数据分成训练和评估子集,现有标记数据被用作未来/不可见数据的代理。
有许多策略可以做到这一点,其中四个最常见的是:
使用默认或自定义比率将其分成两个子集,按顺序,即按其在信号源中出现的顺序,确保没有重叠。例如,前 70%的数据用于训练,后 30%的数据用于测试。
使用默认或自定义比率,通过随机种子将其分成两个子集。例如,随机选择 70%的源数据用于训练,随机子集的补充数据用于测试。
使用上述方法中的任何一种(顺序或随机),同时在每个数据集中打乱记录。
当需要对分离进行显式控制时,使用自定义注入策略分割数据。
数据分离本身并不是一个独立的 ML 管道,但是必须有一个 API 或服务来帮助完成这个任务。接下来的两个管道(模型训练和评估)必须能够调用这个 API 来取回所请求的数据集。就代码组织而言,策略模式是必要的,以便调用方服务可以在运行时选择正确的算法,并且显然需要能够注入比率或随机种子。此外,API 必须能够返回带有或不带有标签/特征的数据——分别用于训练和评估。
为了防止调用者指定导致不均匀数据分布的参数,应该发出警告并随数据集一起返回。
— ④:模型训练
使用数据的训练子集让 ML 算法识别其中的模式。
模型训练管道是离线的,它的时间表根据应用程序的关键程度而变化,从几个小时一次到一天一次。除了调度器之外,该服务也是时间和事件触发的。
它由一个训练模型算法库(线性回归、ARIMA、k-means、决策树等)组成,以一种可靠的方式构建,为新模型类型的持续开发做准备,并使它们可以互换。使用 facade 模式的包容也是集成第三方 API 的关键技术(这也是 Python Jupyter 笔记本可以被包装和调用的地方)。
并行化有几个选项:
最简单的形式是为每个型号配备一个专用管道,即所有型号同时运行。
另一个想法是将训练数据并行化,即数据被分区,每个分区有一个模型的副本。这对于那些需要实例的所有字段来执行计算的模型(例如 LDA、MF)是优选的。
第三种选择是将模型本身并行化,即模型被分区,每个分区负责一部分参数的更新。这是线性模型的理想选择,如 LR,SVM。
最后,可以使用一种混合方法,结合一个或多个选项。(要了解更多信息,我推荐你阅读这本出版物)。
在实施模型训练时,必须牢记容错,并且应启用训练分区上的数据检查点和故障转移,例如,如果之前的尝试由于某些瞬时问题(例如超时)而失败,则可以重新训练每个分区。
既然我们已经介绍了这个管道的功能,那么让我们打开工作流:模型训练服务从配置服务获得训练配置参数(例如,模型类型、超参数、要使用的特性等),然后从数据分离 API 请求训练数据集。该数据集被并行发送给所有模型,一旦完成,模型、原始配置、学习到的参数以及关于训练集和计时的元数据将被保存在模型候选数据存储中。
— ⑤:候选模型评估
使用数据的测试子集评估模型的性能,以了解预测的准确性。
这条管道也是下线。通过使用各种度量标准将评估数据集上的预测值与真实值进行比较,来评估模型的预测性能。选择评估子集上的**“最佳”模型**来对未来/新实例进行预测。由多个评估者组成的库旨在提供模型的准确性度量(如 ROC 曲线、PR 曲线),这些度量也根据模型保存在数据存储中。同样,同样的模式也适用于这里,允许在评估器之间灵活地组合和切换。
在编排方面,模型评估服务从数据分离 API 请求评估数据集,并且对于来源于模型候选库的每个模型,它应用相关的评估器。评估结果被保存回存储库。这是一个迭代过程,超参数优化以及正则化技术也被应用于最终模型。最佳模型被标记用于部署。最后,通知服务广播模型已经准备好进行部署。
这个管道还需要符合所有的反应特征。
— ⑥:模型部署
一旦选定的模型产生,它通常被部署并嵌入到决策框架中。
模型部署不是终点;这只是开始!
选择的最佳模型被部署用于离线(异步)和在线(同步)预测。可随时部署多个模型,以实现新旧模型之间的安全过渡——即当
部署新模型时,服务需要继续服务预测请求。
传统上,部署中的一个挑战是操作模型所需的编程语言不同于开发它们所使用的语言。将 Python 或 R 模型移植到 C++、C#或 Java 等生产语言中是一项挑战,通常会降低原始模型的性能(速度&准确性)。有几种方法可以解决这个问题。排名不分先后:
用新语言重写代码[即从 Python 翻译成 CSharp]
创建自定义 DSL(领域特定语言)来描述模型
微服务(通过 RESTful API 访问)
API 优先方法
容器化
序列化模型并加载到内存中的键值存储中
更具体地说:
脱机的
在离线模式下,预测模型可以部署到容器中,并作为微服务运行,以按需或定期创建预测。
另一种选择是围绕它创建一个包装器,这样您就可以控制可用的功能。一旦发出了一个批量预测请求,您可以将它作为一个单独的进程动态加载到内存中,调用预测函数,从内存中卸载它并释放资源(本机句柄)。
最后,另一种方法是将库打包成一个 API ,让调用者直接调用它,或者将它打包到他们的服务中,以完全接管预测工具的控制权。
就可伸缩性而言,可以创建多个并行管道来容纳负载。这涉及到微不足道的工作,因为 ML 模型是无状态的。
在线的
这里,预测模型可以在容器中部署到服务集群,通常分布在队列后面的许多服务器中,用于负载平衡,以确保可伸缩性、低延迟和高吞吐量。客户端可以通过网络远程过程调用 (RPC)发送预测请求。
或者,键值存储(例如 Redis)支持模型及其参数的存储,这大大提高了性能。
✳️关于实际的模型部署活动,它可以通过连续交付实现来自动化:所需的文件被打包,模型被可靠的测试套件验证,最后被部署到运行的容器中。测试由自动化构建管道执行:首先评估简短的、自包含的、无状态的单元测试。如果它们通过,预测模型的质量将在更大的集成或回归测试中进行测量。当两个级别的测试都通过后,应用程序就被部署到服务环境中。
启用一键部署比较理想。
— ⑦:模型评分
将 ML 模型应用于新数据集的过程,目的是揭示有助于解决业务问题的实际见解。又名模特服务。
✏️ 模型评分和模型服务是业内可以互换使用的两个术语。在阅读了这个资源之后,我想到了评分的真正含义,所以在继续之前,让我们快速地了解一下基础知识,以防你也不清楚:
模型评分是在给定模型和一些新输入的情况下生成新值的过程。使用通用术语分数,而不是预测,因为它可能导致不同类型的值:
推荐项目列表
时间序列模型和回归模型的数值
概率值,表示新输入属于某个现有类别的可能性
新项目最相似的类别或聚类的名称
分类模型的预测类别或结果。
继续……一旦部署了模型,就可以根据之前的管道或直接从客户端服务加载的特征数据进行评分。当提供预测时,模型在离线和在线模式下应该表现相同。
脱机的
在离线层,评分服务针对大数据集合的高吞吐量、一次性预测进行了优化。应用程序可以发送异步请求来启动评分过程,但需要等到批量评分过程完成后才能访问预测结果。该服务准备数据、生成要素,但也从要素数据存储中提取额外的要素。评分发生后,结果将保存在评分数据存储器中。向代理发送消息以通知评分已经完成。应用程序正在监听这个事件,并在收到通知时获取分数。
在线的
客户向在线评分服务发送请求。它可以有选择地指定要调用的模型的版本,因此模型路由器检查请求并将其发送给相应的模型。与离线层类似,服务会根据请求准备数据、生成要素,并根据需要从要素数据存储中提取额外的要素。一旦评分发生,结果被保存在评分数据存储器中,然后通过网络发送回客户端。
根据不同的用例,分数也可以异步交付给客户端,即独立于请求:
Push:一旦分数生成,它们就作为通知被推送给调用者。
Poll:评分一旦生成,就存储在低读取延迟的数据库中;呼叫者周期性地轮询数据库以获得可用的预测。
为了最大限度地减少系统在收到请求时提供评分的时间,采用了两种方法:
输入特征存储在低读取延迟的内存数据存储中,
缓存在离线批量评分作业中预先计算的预测,以便于访问【这取决于使用案例,因为离线预测可能不相关】。
— ⑧:性能监控
该模型被持续监控,以观察其在现实世界中的表现,并相应地进行校准。
任何 ML 解决方案都需要定义良好的性能监控解决方案。我们可能希望看到的模型服务应用程序的信息示例包括:
·模型标识符、
·部署日期/时间、
·模型服务的次数、
·平均/最小/最大模型服务次数、
·所用特征的分布。
预测结果与实际/观察结果的对比。
此元数据在模型评分期间计算,然后用于监控。
这是另一个离线管道。性能监控服务在提供新的预测时得到通知,执行性能评估,保存结果并发出相关通知。评估本身是通过将分数与数据管道(训练集)生成的观察结果进行比较来进行的。监控的基本实现可以遵循不同的方法,最流行的是日志分析 (Kibana、Grafana、Splunk 等)。
为了确保 ML 系统的内置弹性,新型号的速度表现不佳会触发先前型号生成的分数。采用了一种*“错总比晚好”*的哲学:如果模型中的一项计算时间太长,那么该模型将被一个先前部署的模型所替代,而不是阻塞。
此外,当分数变得可用时,它们会加入到观察到的结果中——这意味着会生成模型的连续准确性测量,并且与速度性能一样,任何下降的迹象都可以通过恢复到以前的模型来处理。
责任链模式可以用来将不同的版本链接在一起。
模型监控是一个连续的过程:预测中的变化可能会导致模型设计的重构。不断提供准确的预测/建议以推动业务向前发展,这就是 ML 的优势所在!
交叉问题
我们不能在结束这篇文章时不提及跨领域的关注。像任何其他应用程序一样,ML 应用程序有一些跨层/管道的通用功能。甚至在一个单独的层中,这样的功能可以跨所有的类/服务使用,穿过和跨越所有正常的边界。
横切关注点通常集中在一个地方,这增加了应用程序的模块性。它们通常由组织中的其他团队管理,或者是现成的第三方产品。依赖注入是在代码的相关地方注入这些的最好方式。
在我们的用例中,要解决的最重要的问题是:
通知
调度
日志框架(和警报机制)
异常管理
配置服务
数据服务(公开数据存储中的查询)
审计
数据沿袭
缓存
检测
把所有这些放在一起
这就是了…一个生产就绪的 ML 系统:
End to End ML Architecture
脚注
恭喜你!你坚持到了最后!我真的希望你喜欢数据科学的软件工程之旅!
感谢阅读!
🙏🏻 💎整理这篇文章花费的时间超过了我最初的预期;不得不应付各种事情——家庭/工作需求等。向我忍受了这么多深夜的丈夫大声欢呼吧!你是一块宝石!
我定期在媒体上写关于技术的&数据——如果你想阅读我未来的帖子,请‘关注’我 !
面向设施的架构设计
6 个基本的软件质量
解决方案架构师在软件项目中起着举足轻重的作用,因为他们设定愿景并指导开发团队开发出最佳的解决方案。从许多不同的角度查看架构的能力是项目成功的基础。前面我们讨论了帮助架构师评估他们在整个项目生命周期中所做决策的五个关键原则。
今天我们将看到另一个同样重要的方面:T2 架构关注点 T3,或者 T5 质量属性 T6,T7,T8 系统能力 T9,或者 T11 非功能需求 T12,T13,并对其中最重要的做一个简短的概述。这些定性需求有时被命名为***-能力*** ,以单词 share(可用性、可维护性、可伸缩性等)的后缀 𝕞𝕠𝕤𝕥 命名。
功能和质量属性是正交的
𝕎𝕙𝕪 𝕤𝕙𝕠𝕦𝕝𝕕 𝕨𝕖 𝕔𝕒𝕣𝕖…
我最不喜欢的术语是“非功能性需求”(NFRs)——这完全是一个误称:谁会基于非功能性的需求来构建系统??这些要求指的是一个系统应该具备的品质和它必须运行的约束!因此,我更喜欢质量属性(QA)这个术语。
it 项目通常资金不足,而在开发阶段最重要的是功能!质量属性很容易成为降低优先级的目标,但是忽略它们的后果会直接导致质量问题和技术债务的增加。
然而,这种选择是短视的:质量保证会对设计产生更大的影响,如果我们弄错了,它们会对交付产生连锁反应,因为它们会导致昂贵的返工。根据我的经验,系统被重新设计并不是因为它们在功能上有缺陷(通常计算和功能通常是相同的),而是因为它们无法扩展、难以维护、太慢……这样的例子不胜枚举!
Functional Requirements are just the tip of the iceberg
𝕌𝕟𝕒𝕞𝕓𝕚𝕘𝕦𝕠𝕦𝕤 𝕤𝕡𝕖𝕔𝕚𝕗𝕚𝕔𝕒𝕥𝕚𝕠𝕟
到目前为止,我们已经宽泛地定义了术语“质量属性”。这里有一个更具体的定义:
质量属性是一个系统的可测量的和可测试的属性,它表明系统满足其涉众需求的程度。
我在强调 QA 是可测量的和可测试的 : 的重要性,为了指定一个有形的、明确的 QA,我们应该涵盖这六个重要部分:
→ 刺激:到达系统时要考虑的条件。
→ 来源:产生刺激的实体。
→ 环境:刺激发生的环境,如正常运行、压力条件、故障等。
→ 神器:被刺激的系统部分。
→ 响应:刺激到达后发生的系统活动。
→ 测量:响应满足要求的程度。
例如:“正常运行时收到不可预见的外部消息。该消息被记录下来,系统继续运行,没有停机时间。
✏️如果你想了解更多,这所加拿大大学有一个关于如何记录质保的浓缩章节。
𝕀𝕥’𝕤 𝕒 𝕓𝕒𝕝𝕒𝕟𝕔𝕚𝕟𝕘 𝕒𝕔𝕥…
维基百科记录了过多的问答,学术界多年来定义了多种分类法:
Courtesy: Kennet Henningsson
同样,至少有几个 ISO 标准(据我所知)试图将质量保证体系分为不同的类别: ① ISO 25010 和 ② ISO 9126 。
所有的质量保证都是至关重要的,但是正如一句老话所说:我们不能鱼和熊掌兼得!
一方面,成本会过高,上市时间会达到顶点,另一方面(也是最重要的一点)一些 QA 往往会对其他 QA 产生负面影响。例如,为了最大化可维护性,我们可能不得不牺牲效率;或者增加的可靠性可能对性能有负面影响;或者当软件在多个平台上运行时,可用性通常会受到影响(可移植性)。
Quality Attributes Trade Offs — Courtesy: Implementing System Quality Attributes
这就是建筑发挥作用的地方!
我们做出的所有架构决策都会对最终系统的 QAs 产生直接影响。因此,根据我们所处的业务领域的需求,以及不同系统利益相关者的观点,确定优先级的方法非常重要。
虽然有几种方法可以对系统质量进行排名,但在本文中,我将涵盖在构建应用程序时,我在和 实用性 方面排名最高的那些,尤其是在金融领域。
𝟙 𐩑表演
性能是指系统在给定的约束条件下,如速度、精度、内存使用等,满足时序要求的能力。
它的得分是以:
- 吞吐量:给定时间范围内执行的事件数量
- 延迟:响应特定事件所花费的时间
- 容量:在继续满足吞吐量和延迟需求的同时处理的事件数量
为了提高系统的性能,可以采用几种策略,例如:
◽缓存
◽增加硬件资源:内存、CPU、网络
◽负载平衡
◽引入并发性
◽数据分区/复制
性能是系统架构中的一个驱动因素,通常会影响其他 QAs 的实现。它通常与可伸缩性相关,即增加系统的工作能力,同时仍然表现良好。让我们继续看看这意味着什么:
𝟚 𐩑可扩展性
可伸缩性允许系统优雅地响应对其提出的要求,并处理增加的工作负载,而不影响性能或其扩展架构以容纳更多用户、进程、数据等的能力。
挑战在于评估将对系统提出的需求的性质以及将受到压力的组件。在前期设计时,我们经常把重点放在错误的地方,我们试图在不测试预期系统行为的情况下进行优化。
有两种可伸缩性:
- **垂直可扩展性(纵向扩展)指的是购买更大的硬件,例如向现有服务器添加更多内存/CPU/硬盘。
- **水平可扩展性(向外扩展)是指添加多组硬件资源来划分负载并响应相同的请求,例如,向服务器集群添加另一台服务器。总的来说,它更具成本效益,因为它使我们能够从小处着手,然后随着时间的推移对系统的请求做出反应。
Courtesy: The Art of Scalability
规划扩展时,需要考虑以下几点:
◽用户数
◽数据量
◽ CPU、内存、I/O 密集型操作
◽并发
◽异步而非同步
◽无状态
◽长时间运行操作(非高峰时间批量调度)
在设计可扩展性时,最容易忽略的是以下需求:
- 监控机制:必须观察系统的健康状况!当资源利用率超过 80%时,应向运营和开发团队发出警告,以便采取补救措施。
- 压力测试:当务之急是让系统达到极限,以找出哪些操作是密集的,断点在哪里,并确定系统在负载下将如何失败(我们正在寻找的是“优雅的故障转移”)。
𝟛 𐩑可用性
可用性表示系统的可访问和可用的能力,尤其是在发生故障之后。反过来,这也意味着企业愿意接受多少停机时间。企业通常要求 24x7 全天候正常运行,但相关成本可能相当高。
以下是一些需要牢记的注意事项:
- 当服务不可用时,恢复过程是什么:是自动的还是手动的;停机时间有多长;能否满足 SLA(服务水平协议)?
- 执行 RCA(根本原因分析)后,有什么缓解计划来避免将来出现故障?
- 发生故障时需要哪种通知?
- 系统的恢复能力是什么,即系统多久出现一次故障?
必须检测到故障,根据应用程序的关键程度和故障类型,系统必须以可接受的方式做出响应。在故障转移的情况下,采用恢复技术。理想情况下,必须完全防止故障。
Courtesy: Ericsson
让我们来看一些增强系统可用性的方法:
检测:
用于事件排序的◽时间戳
用于定期系统监控的◽心跳
用于数据验证的◽校验和
◽异常记录
等待时间超过预定义限制时的◽超时
◽自测正确性
◽ 机器学习检测
恢复:
编程环境中的◽异常处理
◽回滚,即恢复到之前的良好状态
◽在出现暂时错误(如网络故障)的情况下重试
◽使用替代操作重试(如 t 的市场价格不可用,则尝试获取 T-1)
◽服务重启
预防:
◽异常预防
◽事务
◽优雅地关闭并重新实例化
◽增加了测试覆盖率
𝟜 𐩑延展性
可扩展性是指系统通过灵活的架构、设计或实现来迎合未来变化的难易程度。扩展可以通过添加新功能或修改现有功能来实现。快速上市对任何组织来说都是至关重要的,因为它会影响组织扩大与相关系统相关的收入的能力。
需要注意的一些关键因素是:
- 高内聚低耦合
- 应用可靠的原则(尤其是开闭原则和依赖倒置原则)和设计模式,这些原则和模式允许在不影响架构的情况下改变系统行为
[ 本文 解释了可靠的原则如何也适用于架构——不仅仅是编程】 - 关注点的分离,例如将应用程序逻辑分离到不同的层(客户端、表示层、业务逻辑层)
- 使用抽象来设计那些易受变化影响的系统边界
- 模块化改进用户界面,以便不同的模块可以在影响最小的情况下可用
- 可插拔架构
- 利用带有动态规则的工作流引擎
- 通过 API 公开层、子系统和模块的功能
- 一键式部署,实现快速上市
- 高测试覆盖率证明没有副作用
可扩展性的线索是在最初的设计阶段主动倾听业务,寻找他们可能想要改变系统行为的地方。
✏️请不要将可扩展性和可修改性混为一谈:可修改性意味着有可能改变软件,而可扩展性意味着改变已经被计划好了,并且将(几乎)毫不费力!
𝟝 𐩑支持度
可支持性是系统为识别和解决问题提供有用信息的能力。这里的主要要求定义如下:
- 记录持久环境中的所有故障(数据必须与用户和支持工程师相关)
- 启用时间线分析和错误跟踪的日志记录
- 能够在出现故障时对系统状态进行快照,以便在开发环境中重现该状况
- 符合标准、最佳实践、参考体系结构等
- 最新文档(包括架构图、接口、编码指南等)
- 技术债务管理
- 系统健康检查监控公司测试应用程序是否正确运行
请不要低估这种质量保证的价值:组织 IT 预算的很大一部分花费在关键软件的维护上,因此应用程序越容易维护,其 TCO ( 总拥有成本)就越低。
𝟞 𐩑可用性
可用性解决了建立软件提供增强用户体验的能力的因素。用户界面的设计必须考虑到预期的最终用户,这样它们才是直观的、一致的、易于学习和操作的。
用于实现质量指标的一些策略是:
- 异步 API 用于长时间运行的进程或后台任务,因此 UI 控件不会冻结
- 利用相关的 UI 设计模式,使用适当的组件/部件
- 可逆操作(取消/撤消)
- 自动完成
- 个性化和用户偏好持久性
- 认可而不是回忆
- 通知和反馈机制(特别是关于故障)
- 消除过多的点击
- 用户界面的美学和视觉外观
- 支持不同的交付媒介:手机、电脑、平板电脑
- 帮助和文档
架构对可用性的支持是用户满意度的关键,通常用效率(任务对速度)和产品的有效性来衡量。架构师通常会忽略这一点,他们主要关注服务器端架构,而将用户界面留给分析师。
这是大错特错!表示层与应用程序在架构上的分离不足以解决所有的可用性问题,这些问题会深入到应用程序的表示层之外。
𝔼𝕡𝕚𝕝𝕠𝕘𝕦𝕖
选择正确的软件质量属性来关注,增加了应用程序持续更长时间的机会,并获得了提高组织投资回报的好处。
质量不是一种行为;这是一种习惯——亚里士多德
通常有利于一个质量属性的决策会对另一个产生影响,因此从一组相互竞争和不断变化的需求中找到最佳解决方案是一项挑战。
但这正是软件架构成为真正的工程科学的原因!
My top 6 Quality Attributes
如果您想进一步了解我们介绍的一些主题,这里有一些不错的资源:
参考资料:
- 如果你要回顾 QAs 上的一个人工制品,它必须是这个:
质量属性——软件工程研究所 - 体系的质量属性调查
- 软件质量属性之间的关系
- 通过软件架构实现可用性
感谢阅读!
我经常在媒体上写关于技术的&数据——如果你想阅读我未来的帖子,请‘关注’我 !
建筑和风格
人工智能在建筑领域的新前沿
斯塔尼斯拉斯·夏洛 ,哈佛大学设计研究生院| 2019 年 6 月 2 日
GAN-Generated Apartment Units, with Specific Styles | Source: Author
本文放出 我们的论文 的一部分,在哈佛开发,2019 年 5 月提交。这件作品是一个更大的作品的一个组成部分,调查艾在建筑上的开端,它的 历史背景 ,它的潜在空间 组织&风格 。
我们 在 上一篇 **的基础上构建,我们的重点是围绕平面图的严格组织及其生成,使用人工智能,更具体地说是生成性对抗神经网络(GANs)。**当我们改进生成平面布置图的能力时,我们提出了模型固有偏差的问题,并在此提出将我们的研究扩展到简单的组织命令之外。我们研究建筑风格学习,通过训练和调整一系列特定风格的模型:巴洛克风格、联排别墅、维多利亚郊区别墅、&曼哈顿单元。除了每种风格的简单噱头,我们的研究揭示了风格的深层含义:不仅仅是它的文化意义,风格携带了一套基本的功能规则,定义了一个明确的空间机制,并控制着计划的内部组织。在这篇新文章中,我们将尝试证明建筑风格对平面布局构成的深远影响。
提醒:人工智能和生成对抗性神经网络
在研究人工智能及其对建筑实践的潜在整合的同时,我们建立了一个完整的生成方法,使用了生成对抗神经网络****【GANs】。当应用于二维信息生成时,人工智能的这个子领域已经被证明产生了巨大的结果。与任何机器学习模型一样,GANs 从提供给它们的数据中学习具有统计意义的现象。然而,它们的结构代表了一个突破:由两个关键模型组成,即生成器和鉴别器,GANs 利用两个模型之间的反馈回路来完善它们生成相关图像的能力。鉴别器被训练来从一组数据中识别图像。经过适当的训练,该模型能够区分从数据集中取出的真实示例、来自数据集外来的“假图像。然而,生成器被训练来创建类似于来自相同数据集的图像的图像。**当生成器创建图像时,鉴别器向其提供一些关于其输出质量的反馈。作为响应,发生器会进行调整以产生更真实的图像。**通过这个反馈回路,GAN 逐步建立其创建相关合成图像的能力,将观察到的数据中发现的现象考虑在内。
Generative Adversarial Neural Network’s Architecture | Image Source
我们特别将这种技术应用于平面图设计,使用平面图的图像表示作为 GAN 模型输入和输出的数据格式。我们工作中使用的框架是 Pix2Pix ,这是一个标准的 GAN 模型,面向图像到图像的翻译。
一.组织
元素的空间布局是建筑学科的一个重要关注点。正如前一篇文章 中的 所证明的那样,这个练习并不是无足轻重的,可以按一系列步骤来离散化。每一步实际上都被一个训练有素的 GAN 模型所捕捉。对每个模型所学到的组织的仔细研究揭示了一个更深层次的偏见的存在,我们的学科称之为架构风格*。打开我们的“世代堆栈”将帮助我们找到不同层次的风格,并分离出风格影响的基础。*
管道和发电
首先,我们提出一条流水线,通过一个接一个地嵌套连续的模型,我们帮助建筑师生成一个连贯的房间布局(模型 I)和家具(模型 II),最终将所有公寓单元重新组合成一个暂定平面图。
Generation Pipeline, Model I & Model II | Source: Author
对于整个流程中的每一步,我们都为用户提供了一个简单的界面。在左侧,他/她可以输入一组约束和边界,以在右侧生成结果计划。然后,设计师可以反复修改左边的输入,以优化右边的结果。下面的动画展示了为型号 I. 设置的这种界面和流程
下面的界面也可以在下面的 地址试用。 (性能取决于屏幕分辨率/浏览器版本— Chrome 建议)
Model I Interface | Source: Author | link
偏见,或风格的出现
T 考虑到一批生成的单元,我们开始注意到我们的模型的一些内在偏差:内墙结构始终如一地布置成一个正交的隔断系统,忽略了单元立面的潜在方向(见下图)。与此同时,项目的布局也始终如一,以至于“服务于”的空间- 浴室、厕所、壁橱、厨房 -被打包在地块的后面,而立面的奇怪几何形状被过大尺寸的客厅和卧室所吸收。
Plan Wireframe (left) & Program Repartition (right) of Generated Apartment Units | Source: Author
事实上,这些特征在我们最初的训练中随处可见。我们在这里将这种现实理解为对建筑学科核心概念的字面翻译:风格。
二。风格
我不去阻止这种偏见,而是努力创造一个通用或目标计划生成器——这不是我们在这里关心的——我们宁愿拥抱它,研究它的存在,最终利用它为我们所用。
为此,我们选择拓宽我们的研究,将其扩展到建筑风格学习。我们创造了一个新的渠道,使平面图能够从一种风格转换到另一种风格,从现代风格转换到巴洛克风格。
Modern-to-Baroque Translation & Subtraction | Source: Author
上面的例子更加揭示了建筑风格的深层含义:在这张 GIF 图中,我们从翻译的平面图(巴洛克)中减去了最初的墙壁结构(现代)。剩下的“ poché ”是巴洛克风格引发的添加:它不仅仅是对现有人物墙的全新改造,而是对内部结构和空间组织的深刻重塑。
事实上,我们在这里证明了 Farshid Moussavi 在她的书中所创造的风格的 功能。每一种风格,除了其文化意义之外,对空间的处理方式也各不相同,对相似的限制也有不同的反应。
**为了研究建筑风格的学习,**我们已经训练和调整了一系列特定风格的模型——巴洛克、联排别墅、维多利亚郊区住宅、&曼哈顿单元——能够模拟每一种特定的建筑风格。
对于每种风格,我们在下面显示了初始训练集(左)、一些结果生成的公寓单元(中),以及相同公寓单元的物理模型(右)。
Baroque Apartment Units | Source: Author
Manhattan Apartment Units | Source: Author
Row-House Apartment Units | Source: Author
Victorian Apartment Units | Source: Author
在生成的单元中,我们可以在每种风格中识别出一些清晰的模式。对我们来说,这种适用于每种模式的“行为”是每种风格机制的直接翻译。不仅仅是在每个公寓单元上应用简单的纹理,每个模型都捕捉到了一系列的特征和规则。
Characteristics Graph Template | Source: Author
为了超越这种简单的观察,我们提供了每种风格的能力。每个型号都对应一系列优点&缺点,将它们记录下来将使我们能够真正评估每种风格的实际功能。此外,我们希望扩展我们对模型能力的理解,允许我们以后在给定一组新的约束和功能需求的情况下,有目的地使用每一个模型。
在 clear 中,我们提出了一个六轴图,反映了给定模型处理六种特定类型条件的能力:深度、紧凑度、单方向或多方向(正面数量)、锐角(边界的尖锐几何形状)、程序谱(程序的宽度)。
在彻底测试了我们的四个模型之后,我们提出了以下图表…
Styles’ Characteristics Graphs | Source: Author
更具体地说,为了明确上述图表,我们对每种风格的特征进行了深入的解释:
巴洛克风格
- 可以处理深度和尖锐的几何边界。通过增加壁龛和壁龛,这种风格可以细分地块,并在地块的深度上雕刻出合适的空间。
- 然而,这种风格需要空间来展开其逻辑和内部结构,因此不能很好地响应紧凑的足迹。
曼哈顿风格
- 对单向或双向反应更好。
- 显示了广泛的编程范围。
- 在处理深度和尖锐的几何边界方面有问题。
排屋风格
- 可以充分利用紧凑的空间,将功能分散在楼层之间,并将每个功能限制在狭小的隐蔽空间内。
- 深度得到了很好的处理,并经常充满了垂直循环,周围的服务空间聚集。
维多利亚风格的郊区
- 轻松处理多个方向。
- 很好地处理了深度,通过居住在中心地带的服务空间。
- 展示了大量的房间和丰富的规划
- 但是,这种样式对紧凑轮廓线的反应很差,并且无法真正处理尖锐的几何边界。
Building Massing (North,East, South & West Elevations) | Source: Author
三。应用
最终,我们将所有这些直觉融合在一个最终的建筑项目中:一个位于曼哈顿下东区的大型住宅开发项目。地块的复杂几何形状给我们的设计增加了一定的复杂性。由于我们的聚集(上图),我们获得了 380 个独一无二的公寓单元的目录(下图,右)。
A.一栋建筑
Sequence Of All Floors (Left), Catalog of Floorplates (Center) and Units (Right) | Source: Author
我们首先尝试处理整个地板,每次使用不同的风格。下面显示的结果再一次揭示了谨慎使用风格的必要性,尊重每个环境的限制和特殊性。如果某些单位使用某种风格成功布局,其他单位则无法找到合适的内部组织。通过在我们的公寓单元目录中选择不同的风格,我们希望为每一个特定的空间条件找到合适的答案。
15th Floor Processed Under Each Style: Baroque (Far-Left), Manhattan (Center-Left), Row-House (Center-Right), Victorian (Far-Right) | Source: Author
了解每个 GAN 模型的优点和缺点,每个风格的潜力和缺点,我们现在使用最适合的模型处理每个公寓。每一层都变成了各种风格的拼布。**然后,我们的目标变成为每块瓷砖、每个单元组成我们的“马赛克”挑选,这是最合理的模型,将最好地处理约束。**在这个选择过程中,我们分离出一些结果选项,如下所示。
3 Options: 10th Floor to 20th Floor, Processed Differently | Source: Author
然后,我们缩小探索范围,精确选择所有地板的单元和风格,最终完成我们的最终设计。下面是三个典型的楼层…
14th, 15th & 4th Story Floorplans | Source: Author
事实上,我们已经把风格变成了功能性工具,能够解决我们开发过程中的特定情况。
然而,正如上述计划所建议的,我们抛开某些约束,并做出明确的假设。我们想澄清这些。
一.结构
这个结构留给了结构核心,而张力索沿着立面延伸。因此,该计划不受垂直负载的干扰,并允许我们的算法自由生成每个单元的分区系统。
注 :回顾我们这一代管道,一个潜在的改进是将承重墙&柱的位置作为模型一的输入,这样我们的管道就可以让设计师控制建筑结构体系。或者,模型 I 可以分解成两个连续的模型,一个用于布置承重构件,另一个用于添加隔墙。
二。效率的严格要求
每种风格的丰富多彩和赋予我们模特的自由程度都没有解决我们行业中普遍存在的问题 : 空间效率。然而,我们在这里主要关心的是最大化每种风格的表现力,让每个模型展开它的机制来展示它的“个性”。
注 :为了调和 GANs 与效率,我们假设它们的输出构成了标准优化工艺的巨大初始化。参数化方法的典型缺陷是建立了一个过于宽泛的问题空间,再加上随机的初始化。在这些设置上运行的优化通常会收敛于局部最小解。我们的 GANs 背后的直觉带来了全新的初始化质量,在建立足够好的初始解决方案的同时,显著缩小了问题空间。
三。聚集
体量的概念指的是我们建筑的外形。上述设计的非理性形式在这里意味着复杂性的触发,为我们的模型创造了实际的挑战。更理性的体量会对应更驯服的&现实的公寓单元设计。我们在这里的重点仍然是展示一个极端的情况,并测试我们的模型的极限。
B.目录
Generated Apartment Units Catalog | Source: Author
我们 **最后翻到上面的单位目录,找到了我们对面的大楼。**由此产生的设计的连贯性和丰富性是惊人的。此外,在生成的单元中显示的"智能"或形式上的灵活性进一步证明了该方法的有效性: GAN 模型确实可以封装一些以后可以使用的体系结构专业知识&风格,这取决于起作用的约束集。第二部分中描述的每个模型的“个性”在每个子集中都清晰可辨。
为了结束这一部分,我们在下面提供了一系列的关键镜头,取自我们的目录。根据平面图的严格描述性质(左),我们每次都将室内氛围的图像(右)联系起来,以此来协调我们的过程与建筑的更多体验性质。
Baroque Apartment Units’ Interior | Source: Author
Manhattan Apartment Units’ Interior | Source: Author
Row-House Apartment Units’ Interior | Source: Author
Victorian Apartment Units’ Interior | Source: Author
四。结论
如果说在严格意义上平面图是工程的产品之前,我们可以先把平面图看作是构图,那么研究构图的驱动力也许是人工智能可以为我们提供一些有意义的答案的地方。根据这种直觉,我们在本文中证明了建筑风格在更深层次上承载了一种隐含的空间机制,这种机制会显著影响任何平面布局的构成。很明显,选择一种特定的风格会产生空间上的后果。
在更基本的层面上,我们可以认为风格是建筑历史的副产品。如果在每一种风格中都有一套更深层次的功能规则,那么研究建筑历史就有可能理解这些隐含规则随时间的演变。能够封装每种风格可以让我们超越对先例的研究,并通过解开 GAN 模型(如这里训练的那些)的行为来补充它。他们模仿一些建筑潜规则的能力可以让我们解决嵌入建筑中的"无名质量",这是克里斯托弗·亚历山大在他的书《永恒的建筑之道》中定义的。人工智能只是研究它的一种新方法。
最后,风格在每个 GAN 模型中的内在存在构成了最后一点:远离不可知论者的承诺&生成设计的客观实践,似乎风格不可逆转地渗透到任何生成过程的本质。明确地说:风格不是附属的、表面的或装饰性的附录。风格是构图的核心。认识到这个证据是理解 AI 能给建筑带来什么的先决条件。换句话说,将不存在不可知论的人工智能架构,没有没有风格的机器,没有客观的生成式设计。相反,每一个模型或算法都有自己的特色、个性和诀窍。
文献学
- 文体的功能,法希德·穆萨维,Actar 出版社,2016 年
- 一种模式语言,关于合成形式的注释,克里斯托弗·亚历山大,链接
- 超越计算机的数字建筑
- 数据驱动设计&构建,兰迪·多伊奇,威利
- 建筑智能,设计师和建筑师如何创造数字景观,莫莉·赖特·斯汀森,麻省理工学院出版社
- 建筑谷歌,超越网格——建筑&信息技术第 226–229 页,Ludger Hovestadt,Birkhauser
- 算法复杂性:凭空而来,复杂性,设计策略&世界观第 75–86 页,Andrea Gleiniger&Georg Vrachliotis,Birkhauser
- 代码&机器,代码,操作间&叙述第 41–53 页,Andrea Gleiniger&Georg Vrachliotis,Birkhauser
- 格罗皮乌斯的问题还是关于在建筑和艺术中揭示和隐藏代码,代码,介于操作&叙述第 75–89 页,安德烈·格莱尼格&格奥尔格·弗拉赫利奥蒂斯,伯克豪斯
- 软架构机器,尼古拉斯·尼葛洛庞帝,麻省理工学院出版社
- 建筑机器,尼古拉斯·尼葛洛庞帝,麻省理工学院出版社
- 地图的变质作用;或者输入 RoweBot ,Andrew Witt,Log #36
- 灰拳击,安德鲁·威特,日志#43
- **人类与人工智能中的暗示性绘画,**辜莞允·马丁内兹,哈佛 GSD 论文,2016
- 启用替代架构:参与式设计的协作框架, Nathan Peters,哈佛 GSD 论文,2017 | 链接
- **通过机器学习的建筑图纸识别与生成,**郑浩(宾夕法尼亚大学),黄卫新(清华大学),ACADIA 2018 [ 论文 ]
- 丹尼尔:自动分析和检索建筑平面图的深度架构,迪维娅·夏尔马,尼廷·古普塔,奇兰霍伊·查托帕迪亚,萨梅普·梅塔,2017,IBM 研究,IIT·焦特布尔
- 建筑平面图中的自动房间检测和房间标记,Sheraz Ahmed、Marcus Liwicki、Markus Weber、Andreas Dengel,2012 年,凯泽斯劳滕大学
- 使用空间索引的平面图自动解释,哈南·萨梅特,Aya Soffer,1994,马里兰大学
- 解析平面图图像,塞缪尔·道奇,久旭,比约恩·斯坦格,2016,亚利桑那州立大学,乐天理工学院
- 项目探索:生成性设计在建筑空间规划中的应用,丹尼尔·纳吉,达蒙·刘,约翰·洛克,吉姆·斯托达特,洛伦佐·维拉吉,王雷,戴尔·赵和大卫·本杰明,2016,生活,欧特克工作室
- 光栅转矢量:重访平面图转换,刘晨,吴家军,普什梅特·柯利,川口恭誉·古川,2017,华盛顿大学,深度思维,麻省理工学院
- 图形文档视觉理解的关系模型。建筑制图应用,2014 年,巴塞罗那自治大学
- 基于骨骼上下文的形状匹配与建模,谢军,heng-Ann Heng,Mubarak Shah,2007,中佛罗里达大学,香港中文大学
- 平面图解释的统计分割和结构识别,Lluís-Pere de las Heras,Sheraz Ahmed,Marcus Liwicki,Ernest Valveny,Gemma Sánchez,2013,西班牙巴塞罗那计算机视觉中心
- 结合使用统计和结构策略在平面图中进行无监督和独立于符号的墙壁分割,llus-Pere de las Heras、Ernest Valveny 和 Gemma Sanchez,2014 年,西班牙巴塞罗那计算机视觉中心
- 使用生成式对抗网络支持智能移动应用的路径规划,Mohammadi,Mehdi,Ala Al-Fuqaha 和 Jun-Seok Oh。, 2018
- 基于方形树形图算法的平面图自动实时生成,Fernando Marson 和 Soraia Raupp Musse,2010 年,PUCRS
- 建筑程序建模,帕斯卡·穆勒,彼得·旺卡,西蒙·海格勒,安德烈亚斯·乌尔默,吕克·范·古尔,2015,苏黎世联邦理工学院,亚利桑那州立大学
- 建筑空间规划的生成式设计,Lorenzo Villaggi 和 Danil Nagy,2017,Autodesk Research
档案馆
轻松访问我们多年来发表的数千篇精彩文章。
欢迎来到走向数据科学存档!
多年来,我们已经出版了数以千计才华横溢、令人惊叹的作家的作品。我们已经涵盖了开创性的概念,新技术,前沿研究,等等。
不幸的是,我们不能永远把一切都放在头版。
在我们的档案中,你可以找到我们已经发表并与你分享的所有精彩文章。如果你正在寻找关于数据科学、机器学习、编程、人工智能、数学概念、伦理和未来的信息,或者如果你正在寻找在这些领域工作的洞察力,开始探索吧!
我们的档案可以很容易地按年份和受欢迎程度排序,但你可能想通过查看特定的标签甚至作者来缩小搜索范围。如果你想找一篇特定的文章,你总是可以在搜索来找到它!
舒服了就开始看书吧!如果您有任何问题或建议,请随时联系我们,让我们知道如何才能使我们的档案变得更好。
谢谢!
具有数据增强的北极猴子歌词生成器
AM:不要相信炒作。艾:嗯…
简介。
外部发生器很酷,对吗?大约两年前,当我第一次看到类似于“莎士比亚发电机”的东西时,我惊叹不已。
通常,文本生成器将是具有递归神经网络或 LSTM 的语言模型,并尝试基于先前的种子词来预测接下来的词。
所以我决定基于北极猴子的歌词创建一个歌词生成器。这个想法分为三个主要部分
- 创建数据语料库并清洗数据
- 文本数据扩充
- 语言模型和生成器
创建数据语料库
我发现乔纳森·戴顿的博客真的很有帮助。它使用 spotifyAPI 获取 spotify 上的艺术家 ID,列出所有专辑 ID,获取所有曲目 ID 的列表。然后使用 GeniusAPI 保存歌曲的所有歌词。这里有一些获取数据的代码片段。
依赖关系:
- 歌词天才
文本扩充
该数据集包括 144 首歌曲,即 167887 个单词。我真的很想对亚历克斯写的歌曲数量发表评论,这些歌曲甚至不包括上一张皮影戏和他的个人专辑中的歌曲——我开始分心了!
如果数据集没有语言建模任务预期的那么大,可以应用文本扩充。
这里使用的两种类型的文本增强是
- 替换-用语言模型通常预测的单词替换当前单词。
- 插入—使用单词作为预测下一个单词的特征。
我为此使用了 nlpaug ,在这篇文章中可以找到一个非常好的概述——马志威
的文本数据扩充库。为了生成歌词的合成数据,我认为使用单词级模型更有益,并且像“naf.sequential”这样的流增强器用于顺序应用不同的增强。
我使用了两种类型的增强——Bert aug 和 FasttextAug。它们都基于上下文插入/替换相似的单词。BertAug 使用 BERT 语言模型来预测被替换的单词或者在插入的情况下预测下一个单词。FasstextAug 基于上下文化的单词嵌入替换或插入单词。
【BERTAug 插入和替换后的结果
进:总有更高更机智的人
出:是总有更高更机智的人
weeeirrrdddd…但听起来差不多是对的。
【FasttextAug 插入和替换后的结果
总有更高的人更有智慧
还有一件有趣的事情发生了,由于子词嵌入,FasttestAug 的未知词没有 ValueError 异常——我使用 wiki-news-300d-1M-subword.vec 来加载模型——
除了——嗯——*“I . d . s . t . I . d . s . t . I . d . s . t . I . d . s . t”,“啾啾!啾啾!啾啾!”和“咻-咻-咻-咻-咻”。*我老实说不怪。
扩充后,语料库中有 334524 个单词。这意味着新数据是原始数据的两倍。
创建扩充数据集确实花了不少时间。(大约一小时左右)我确实有。最终文集的 txt 文件上传到 google drive 。
LSTM 模型
一个理想的文本生成模型将接受一个种子单词/句子,并给出单词的历史记录 w0,…,wk ,它将预测下一个 wn+p 单词。因为递归神经网络和 LSTMs 具有记忆,所以它们基于先前的状态计算下一个观察值。
LSTMs 是特殊的,因为它们有输入、输出和遗忘门以及单元存储器。因此,它们能够在更长的时间间隔内存储信息。这里我用了一个 0.5 辍学和 0.5 经常辍学的 LSTM。
目前,有一些非递归模型在使用转换器的语言建模中表现非常好,比如 OpenAIs GPT-2 文本生成模型。
结果:
结果:
使用 OpenAI 的 GPT-2 进行微调
我使用了GPT _ 2 _ simple——“一个简单的 Python 包,它包装了用于 OpenAI 的 GPT-2 文本生成模式 l 的现有模型微调和生成脚本”
将带有 BERTAug 和 FasttextAug 的原始数据集合并并导出为文本以形成 am_corpus.txt
带有随机前缀的结果:
Generated Lyrics
为了评估这个结果,我使用了胭脂。它代表面向回忆的替角,用于 Gisting 评估。我发现——[什么是 ROUGE,它是如何对摘要任务进行评估的?](http://What Is ROUGE And How It Works For Evaluation Of Summarization Tasks?) —对了解胭脂真的很有帮助。
本质上,GPT-2 模型生成的歌词比 LSTM 模型生成的歌词更有意义!虽然公平地说,LSTM 模型没有得到一个战斗的机会,只有 5 个纪元的训练。
- 谷歌 Colab 笔记本为歌词生成器。
参考
- 文本的数据扩充库马志威
- 是什么让一些 blink-182 歌曲比其他歌曲更受欢迎?第 1 部分乔纳森·戴顿
- OpenAI 的 GPT-2 文本生成模型。
- 递归神经网络中基于理论的辍学应用
编辑:添加评估指标和更多结果。
AI 机器比人更值得信任吗?
人工智能概述—简介
人工智能是计算的子领域。人工智能研究的目标是开发程序(软件),这将使计算机能够以智能的方式运行。第一项研究与计算的根本有关。创造能够智能执行各种任务的机器的想法是计算机科学研究人员的主要关注点,他们在整个 20 世纪下半叶冒险研究人工智能。今天,人工智能的研究集中在专家系统、有限领域的翻译系统、人类语音和书面文本的识别、定理的自动证明器,以及对创造普遍智能的自主代理的持续兴趣。
Photo by Drew Graham on Unsplash
作为一个术语,人工智能在更广泛的意义上意味着人工创造实现人类思维特征功能的能力。自古以来,开发类似创造的可能性就唤醒了人们的兴趣。然而,直到 20 世纪下半叶,这样的可能性才被赋予第一个工具(计算机),为这种冒险开辟了道路。
随着现代科学的到来,人工智能研究正朝着两个基本方向发展:心理和生理对人类思维本质的研究,以及日益复杂的信息系统的技术开发。
从这个意义上来说,人工智能这个术语最初是指有能力实现复杂任务的系统和计算机程序,模拟人类思维的功能,尽管即使在今天,离目标还很远。在这个领域中,最重要的研究领域是信息处理、来自不同知识领域的模型识别、游戏和应用领域,例如医学。
当今信息处理研究的一些领域正集中于寻求训练计算机理解书面和口头信息、创建摘要、回答特定问题或向对该信息的某些部分感兴趣的用户重新分发数据的程序。在这些程序中,重要的是要有系统的能力来创建语法正确的句子,并在单词和想法之间建立联系,或识别意义。研究表明,虽然语言的结构逻辑或语法问题可以通过编写适当的算法来解决,但意义或语义的问题要深刻得多,需要真正的人工智能来解决。[ 1
当今人工智能系统发展的主要趋势是专家系统的发展和神经网络的发展。专家系统试图重现人类对这些符号的思考。神经网络更多地从生物学的角度来做这件事(它们使用遗传算法重建人脑的结构)。尽管这两个系统都很复杂,但结果远非真正的智能思维。
许多科学家对开发真正的人工智能的可能性持怀疑态度。人类思维的功能仍然不为人所知,无论出于什么原因,智能系统的信息设计在更长的时间内基本上无法呈现这些未知和复杂的过程。
人工智能的研究集中在以下智能组成部分:学习、思考、解决问题、感知和语言使用。
人工智能、社会和权力
已经有人指出,人工智能代表了人类历史上的一种新奇事物,从最广泛的意义上来说,它是科学、经济、健康、文化和社会的革命性推动者。然而,事实是,大多数当代社会是强烈两极分化的,一方面是巨富阶层,另一方面是没有足够影响力来改变任何重要事情的平民阶层。[ 2
人工智能的应用极大地增强了现有的权力结构,并更有助于其“锐化”,因为其用途越来越丰富,穷人仍留在原来的地方,甚至变得贫困,而不仅仅是在物质方面。在经济学、分析和决策领域,一言以蔽之,即获取和使用权力,人工智能需要拥有高超知识的专家、强大的设备和资金,事实证明,就其全部能力而言,这种工具非常昂贵,只有非常富有的个人和公司才能使用。正因为如此,中下层人工智能可以在更小的范围内用于商业发展。这些层主要通过大规模移动应用设备提供,这些设备大大简化了一系列工作,从所需产品或服务的快速跟踪开始,到做出购买决定的更短时间和到达这些产品的最短路线,无论是实际到达销售点还是通过互联网购买。因此,社会的这一部分完美地服务于它自己的消费者的角色,但是他能够利用人工智能作为大规模经营的动力要少得多,就像那些能够致富的公司和个人一样。剩下的海量 AI 服务都是好玩的,还有无尽的新闻和服务信息。
的确,普通世界现在对悲剧事件——恐怖袭击、交通事故、战争冲突——以及体育赛事、公众人物的可耻行为和政治事件的最微小细节了如指掌。这应该伴随着社交网络交流的强劲增长。
在下一节中,我想谈谈在我们当前的世界中人工智能的一些更大的实现。
IBM 沃森
每个人都在谈论机器。人工智能。艾。换掉那个人。这是一个在全球范围内广泛讨论的大话题。因为,从逻辑上讲,人们是害怕的。为了你的未来。一些最大的公司正在努力突破人工智能。许多大型 IT 公司多年来一直在积极(并越来越多地)投资人工智能。
IBM 似乎更进一步。IBM 开发了 IBM Watson 认知计算应用程序,该应用程序应用于各个领域,从最复杂的商业决策到大众的日常活动。这个系统存在并已经发展了相当一段时间,并在 2011 年赢得了美国流行的 Jeopardy 秀。
然后,的确,“历史被创造了。”因为一种是学习超级计算机下棋,另一种是完全不同的理解英语中充满同义词、俚语和逻辑的复杂、困难和复杂的句子,并以此为基础得出正确答案。
今天,沃森甚至更先进。到了沮丧的程度。因为它不再只针对拥有巨额货币基金的大型系统。不要!它的一些服务是完全免费的,可以在任何地方应用,甚至在最小的创业公司。它还用于烹饪,其中 Chef Watson 应用程序帮助厨师创建新的食谱。关键是,没有什么是被编程的。最棒的是——在“参与”了成千上万的食谱后,沃森主厨亲口说出,哪种食物、香料和其他东西最好搭配,并且彼此一致。他还在继续学习。所以一个厨师做出了最好的意大利调味饭。在他看来。
因此,这种令人毛骨悚然的人工智能系统(人工智能)可以应用于许多商业领域,从最小的领域,如烹饪行业,到许多高级领域,如时间分析和预测以及飞行控制。例如,这个程序可以应用于一个刚刚开始分析客户的小型创业公司。比方说,你有 2000 个客户。他会分析,而不是你,他们来到你的网站的方式,他们呆了多长时间,来自哪些国家(注册后),与这些国家的文化和习惯进行比较,谁知道还有什么,最后,你可以报告如何“接近”和如何向他销售。吓人。但令人印象深刻。此外,Watson 还可以用作聊天机器人。不要支付昂贵的支持,因为你刚刚开始创业,从沃森聊天机器人将适合你的客户,这是你以前分析过的。
当我看到这一切时,我知道未来对一些人来说是暗淡的,但对一些美好的人来说却是如此。人类文明一直如此。冰箱已经被卖冰的、汽车和汽车车马取代了,人工智能肯定会把一些蛋糕分给出租车司机和卡车司机等其他行业。或者会计师。
深蓝电脑赢得国际象棋世界冠军
八十年代和九十年代计算机的处理器能力和内存容量的快速增长,日益缩小了顶尖棋手和最佳系统之间的差距。最后,在 1997 年 5 月,IBM 开发的国际象棋计算机“深蓝”击败了当时的国际象棋世界冠军加里·卡斯帕罗夫。这场比赛共 6 局,胜率为深蓝 2: 1,3 平。
自动驾驶汽车
国际象棋是一种在虚拟世界中进行的游戏,有一套有限的规则,与此不同,处理现实世界中的问题要复杂得多:每条规则都有许多例外,而且在达到预期目标的过程中经常会出现不可预见的情况。其中一个区域是驾驶汽车。自 20 世纪 70 年代末以来,自动驾驶汽车领域一直在进行研究,这种汽车可以在没有人类干预的情况下安全地从 A 点到达 B 点。
在 20 世纪 80 年代末的第二次人工智能危机之后,美国政府和国防部改变了该研究的资助策略。在这一战略的框架内,DARPA 在填补基础研究和军事用途之间空白的领域组织竞赛。其中一个比赛是 DARPA 大挑战,为使用自动驾驶汽车的团队提供现金奖励。在 2004 年举行的第一次比赛中,没有一辆注册车辆未能穿越设想中的 240 公里长的路线,该路线穿过加利福尼亚州和内华达州的沙漠和山路。明年,也就是 2005 年,多达五辆车到达了终点线,该奖项被授予了最快的车,斯坦福大学的斯坦利。在 2006 年和 2007 年期间,成功举办了 DARPA 赞助的城市地区自动驾驶汽车竞赛。
日常生活中的人工智能(SIRI)
在过去的几年里,用自然语言回答问题已经成为智能移动设备的一个特征。因此,语音解释和识别界面(SIRI)成为了 2011 年底推出的 iPhone 4S 智能手机不可或缺的一部分。SIRI 可以用自然语言与手机主人交流,能够回答问题,为餐馆或电影提供建议,并随着时间的推移适应主人的需求。
Photo by: Fikri Rasyid on Unsplash
现代银行业
对已经在超过 13 个领域实施的人工智能应用的评估表明,86%的银行业主要商业人士已经从这项技术中受益。大多数人同意,到 2020 年,他们将在整个金融系统的各种运营中嵌入人工智能技术,从全球到地方。技术改变银行业的主要方式是提高自动化程度。据推测,自动化将降低 15%的商业成本,而人工智能在这方面发挥着主导作用。
技术进步和自动化带来的问题是它对流通中的工作数量的影响。尽管人们普遍认为自动化意味着许多工作岗位的流失,但在业务中使用人工智能的公司在很大程度上创造了新的工作岗位。预计到 2025 年,与 AI 系统开发和管理相关的新业务数量将增加 16%。
然而,与任何技术创新一样,决定其成功的是它在多大程度上促进了业务和改善了客户体验。如果银行的客户对人工智能系统节省时间感到满意,将他们引向真正的金融产品,这表明先进技术在商业中的应用是成功的。如果新服务让用户感到沮丧,或者让他们感到困惑,那么好的结果就不会出现。只有通过显著改善银行客户的体验和银行官员为客户提供更好服务的能力,才能看出人工智能在金融领域长期应用的有效性。好消息是人工智能系统有能力做到这一点。
人工智能与智力侵蚀
正如提到的,所有当前和未来的人工智能系统都将成为人类的巨大财富,但是我们真正的智能呢?我们会依赖人工智能而不自己解决复杂的问题吗?这让我们的智商更高还是更低?
Photo by Austin Distel on Unsplash
所有这些问题对我们的存在和关于 AI 都至关重要。但更重要的是这些同样问题的答案,这些问题很难回答。
在我看来,机器人永远不会接管世界,但这是一种可能性。
在这个现代世界中,一切都由机器驱动,一小部分代表人类的力量,我们依赖机器为我们做一切,这可能导致人类对地球上生活的可怕看法。
人工智能是为人类服务还是威胁人类?结论
人工智能不再是未来等待我们的东西。它已经成为我们的现在很久了,而且,毫无疑问,我们的未来将在超级数字世界中。今天的孩子已经是这样了,他们在 Siri(苹果)或 Alex(亚马逊)等人工智能系统的帮助下,使用应用程序做作业和睡觉。耶鲁大学的研究人员正在努力开发一种由手机控制的“人造胰腺”,以及一种通过算法明确知道你的胰腺何时需要胰岛素的应用程序。世界上最大的超市沃尔玛已经委托特斯拉生产了 15 辆电动汽车,这些汽车将由人工智能驱动的自动驾驶汽车驾驶,没有司机。快速消费品行业的大公司长期以来一直在使用智能软件进行有针对性的个人广告。人工智能可以让他们预测什么类型的广告最能“从情感上影响你”,影响你的消费习惯。算法和智能机器已经在金融证券交易所交易。
Photo by Jens Johnsson on Unsplash
全球技术变革可能发生得太快,因为更有可能的是,发达和富裕的社会无法充分监控数字化转型。一场关于新数字技术使用增加的社会后果的大辩论充斥了所有的媒体和专业门户网站。
对人工智能的恐惧已经充斥了整个世界。越来越多的人寻求“负责任地使用人工智能”的保证和机制。首先受到冲击的将是体力劳动者,但管理人员和医生、教授将来到现场。机器人将很快接管大量工作。[ 3
问题是等待那些将因为智能机器而失业的人的是什么样的命运,以及他们是否能够适应并从头学习一些全新的数字兴趣。
现代经济发生了多大的变化,最能说明问题的是,如今最富有的公司是那些靠软件等无形资产赚钱的公司。甚至国家也失去了意义。阿里巴巴第一人马云(Jack Ma)非常形象地解释了这一点。“没有人会说‘德国制造’或‘中国制造’,一切都将是‘互联网制造’,”刚刚退休的阿里巴巴创始人表示。
毫无疑问,世界正处于巨大的技术变革中,这将有助于更好的生活和许多领域的改善。然而,所谓的“大数据”和数字技术将是最大的资源,主要的政治和企业斗争将围绕这些资源进行。谷歌、IBM、脸书、亚马逊或阿里巴巴等全球转型的主要参与者负有重大责任。作为企业,他们有义务满足人类对数字技术的需求,但作为全球社会的成员,他们有道德义务使这些过程更加人性化。我们会同意,最终,最终的决定是由人做出的,而不是机器人或算法。至少现在是这样。
参考
[1]人工智能(更新:09.05.2019,16.05.2019)网址:
https://www . Britannica . com/technology/Artificial-intelligence
[2]人工智能的收益与风险(01.06.2016,16.05.2019)网址:
https://future oflife . org/background/Benefits-risks-of-artificial-intelligence/
[3][加迪] (05.05.2019,16.05.2019) —奇点—沃尔夫冈·斯拉尼,网址:
https://www.youtube.com/watch?v=_mk3Xa-rGds
人工智能‘思维机器’真的会思考吗?
自从第一台通用计算机开发以来,科学家们就假设存在人工意识。一个可以反映人脑内部复杂互动的人造系统。虽然一些公众人物公开对即将到来的电子人末日感到恐惧,但对大多数人来说,人工智能现在指的是可以帮助我们更快完成工作的工具和应用程序,而不是机器人和人造人。人工智能现在主要被认为是特定类型技术的狭义使用,不同于人工通用智能(AGI),后者是一个更广泛的概念,包括合成意识。
Elon Musk: right to be afraid?
考虑到人工智能领域在过去十年左右的发展,以及大规模的持续投资,我们在通往终结者、复制人和 R2-D2 的道路上走了多远,以及出现的问题,都值得探索。许多科学家和思想家相信 AGI 是基于普遍性概念的科学必然性,而其他人则认为存在本体论物理局限性阻止了意识的再造。这种分歧实际上是哲学上的分歧;没有经验证据全面支持这两种假设。显而易见的是,科学家在再造甚至改进某些人类技能方面极其有效,但在复制其他技能方面却完全失败。
‘Artoo’ even had a sense of humour.
人工合成意识可能类似于类人智能的想法引发了令人难以置信的伦理和道德问题。这是一个庞大而有趣的话题,我不会在这里讨论。相反,我将考虑发展这样一个实体的实际障碍,以及它们的哲学含义。
人工智能是当今技术研究的主要发展趋势之一,以至于它渗透到了几乎所有其他技术。随着高级分析和自动化变得更加高效和可靠,人工智能将继续重新定义企业的运营方式,这意味着未能适应的公司将面临落后的风险。像自动驾驶汽车中发现的新人工智能技术,或者可以构建全新原创新奇事物的生成性对抗网络,可能会导致以前无法想象的应用和想法的发展。
这些进步是基于“思维机器”的核心思想;可以复制人脑某些认知功能的软件。人工智能没有单一的定义(甚至“智能”一词也是主观的),但它通常被理解为是指能够感知其环境以实现其可编程目标的应用程序。能够学习的机器,即开发超出硬编码的理解能力,是人工智能发展的最大子集之一。机器学习或深度学习算法通常基于人工神经网络。这些是专门模仿人脑工作方式的计算系统。
我们称它们为“思维机器”,尽管它们不像人类那样思考。他们感知他们的环境,但是他们没有意识到它们。计算机配备了内存、,就像有意识的生物一样,现代人工智能系统可以根据信息输入预测或预测*(这是人工智能可以构建预测模型的方式之一,例如用于商业或医疗保健)。这些能力都被认为是意识的必要方面,但机器只能以极其狭窄的形式实现它们。人工智能是不灵活的,除了它明确的、有限的编程之外,它不能预测或记忆。例如,一个旨在预测道路交通模式的高度先进的机器学习算法无法重新利用其智能进行对话或玩游戏。*
Machines can be programmed to learn how to play chess but would be stumped if presented with your accounts.
以这种方式促进人工智能的灵活性似乎是一个巨大的挑战。然而,这可能不是意识最具挑战性的方面。主观体验的概念,也就是内在的、通常无法解释的精神状态和反应,经常被心理治疗师和哲学家认为是意识的“大问题”。托马斯·内格尔写道:
“…一个有机体具有有意识的精神状态,当且仅当有某种东西就像那个有机体的**——某种东西就像那个有机体的***。”***
换句话说,机器思考是不够的——它必须知道自己在思考,并且除了思想之外,还要有自己的存在感。笛卡尔有一句名言“我思故我在”,用来说明他有一个头脑,不同于物理思维的大脑。这个想法经常与 感受性 的概念联系在一起——对感觉的主观解释,既不可解释也不可预测。哲学家们经常会描述我们感知红色时所体验到的疼痛感觉的“疼痛感”或天生的“发红感”。我们可以科学地描述光线与我们眼中的视锥细胞接触时会发生什么,我们可以将其与我们见过的其他类似颜色进行比较,但没有办法让两个人客观地比较他们对红色的个人体验。对于科学家来说,这个概念本身就有问题,他们大多倾向于忽略它。然而,它是许多无形的、不可定义的抽象概念中的一个,这些抽象概念无疑存在于人的头脑中,也存在于人的头脑之外,无法用科学来定义。
Red: perplexing philosophers for generations.
像创造力、人类欲望、社会认知(或共享理解)、意义和自由意志这样的抽象概念是任何有意识存在的必要考虑因素,但已经证明它们本身极其难以数学形式化。这使得它们不可能翻译成计算机代码,因此也不可能翻译成机器代码。它们不能用机器学习或深度学习算法来解释或再造;无论数据集有多大,软件都无法理解或获得人类特有的特性,如同情心或敏感性。要做到这一点,必须用内置的模型对其进行编程,用程序能够理解的术语来描述这些概念所代表的内容。
开发正确的知识结构是人工智能研究人员提高人工智能效率的一个领域,以进一步补充日益庞大的数据集。然而,科学家们要准确地将无形的、情绪化的高级现象描绘成正式的实例还有很长的路要走。
现代计算系统的潜在能力可以用一句格言(也许过于简单)来概括;“如果你能理解一项任务,你就能对它进行编程”。一方面,这表明了巨大的应用潜力,这种潜力来源于人类理解的全部广度并受到其启发。本质上,几乎所有可知的和明确的事物都可以用数学方法形式化和程序化。另一方面,它很自然地将我们的探索局限于植根于物质的明确概念,而不是形而上学和哲学的领域。
所有观点都是我自己的观点,不与甲骨文共享。 请随时在 LinkedIn 上联系我
所有可解释的模型都可信吗?
Picture: Thinkstock
可解释的人工智能或可解释的数据科学是目前数据科学的热门词汇之一。可解释的模型被视为许多最近认识到的机器学习问题的答案,如偏见或数据泄露。
让模型更容易解释的一个常见原因是,用户会更容易信任它们,有时人们似乎认为这些想法几乎是同义的。例如,介绍解释黑盒模型的有影响力的 LIME 方法的论文名为“我为什么要相信你?”好像对一个模型如何做出决定有一个解释就离信任它只有一步之遥了。然而事实真的是这样吗?
这种等价的一个直接问题是,信任是在情感层面上给出的,而解释是一种更具技术性的人工产物——解释模型背后的假设是,可以提供一定数量的信息,以确保用户理解模型在做什么。相反,获得信任意味着跨越许多情感门槛。
因此,虽然过度不透明的模型确实会成为获得用户信任的巨大障碍,但这不是全部——如果满足其他一些条件,甚至可能存在不透明模型值得信任的情况。
首先,让我们回顾一下模型解释有用的一些方式。
- 可以向主题专家展示可解释的模型,允许他们识别模型的缺陷。
- 一个可解释的模型有时可以帮助我们找到一种获得更好结果的方法——例如,生存时间模型可能会提供一些关于如何提高生存时间的线索,尽管这些线索可能有些间接
- 对一个可解释的模型进行故障诊断更简单,因为它的决策过程更清晰。
因此,有理由让一个模型变得可解释,尽管这并不直接赢得信任,但它们可能是信任自己的一条途径。例如,将本地主题专家的意见整合到模型中可能有助于他们信任模型。同时,上面列出的目标本身显然是目的。
本质上,可解释性和信任是不同的,因为与基于事实的可解释性问题相比,信任是一个情绪问题,这仅仅意味着你可以识别单个预测者对模型输出的影响。因为它们对应于不同的问题,所以需要不同的方法来解决它们。
人们信任模型的第一步通常是开始信任展示模型的人或组织。这反过来意味着不要试图理解模型在做什么,而是要理解那个人或组织在做什么——他们希望通过实施这个模型来实现什么?
在迈斯特、格林和高尔方德提出的“信任方程式”中,并在他们的书《值得信赖的顾问》中推广,这对应于自我导向分母,它可以破坏其他积极因素。
更重要的是,理解模型的输入因素可以打开第二波怀疑,如果这些输入因素不符合模型用户的世界观,模型会如何。有时这是有保证的——这就是为什么上面提到的使用主题专家来验证模型解释的步骤很重要。
一旦我们开始呈现模型的输入与输出之间的关系,我们就开始接触人们的认知偏见和先入为主的想法。不管对错,如果你的模型与他们现有的想法相矛盾,人们通常不会轻易相信你的模型。为了克服这些异议,你需要研究他们的想法是什么,以及会阻止他们接受替代方案的认知偏见的种类。
巴斯特·本森的“认知偏见备忘单”提供了一些最重要的认知偏见的有用地图。本文根据他们试图解决的问题总结并解释了认知偏差。
一般来说,模型是对正在发生的事情的总结和简化,所以有些信息需要省略。一个对正在发生的事情有自己先入为主的想法的人很快就会发现他们想在模型中看到的东西被遗漏了。
另一方面,如果每个可能的变量和交互作用都被添加到模型中,它将很快变得太复杂,人类无法理解,因此需要达成平衡,最终模型的用户需要相信一些事情。至少他们需要说服自己,他们认为缺失或不正确的小细节不会影响全局。
克服这些信任问题需要一些要素。
首先,你的组织和它的代表必须产生信任,通过体现信任等式暗示的行为被认为是值得信任的。没有这种最初的信任基础,用户不会参与你的模型和其他努力。
接下来,你的模型需要足够开放和可解释,以允许用户参与其中。开放程度取决于用户和他们的环境。在这种情况下,用户几乎只关心模型的准确性。在其他情况下,用户会对模型的输入与输出之间的详细关系非常感兴趣。这可能会超越模型本身,并转移到对辅助可视化和数据的需求,以帮助用户自己决定正在发生的事情。
接下来,你需要建立一个不会增加他们认知偏差的模型。例如,如果中小企业中有一种理解,即特定变量在特定方向上对目标变量有单调的影响,那么它就需要出现在模型中,除非有其他人尊敬的主题专家支持的良好解释。
关键是没有一个银弹或者捷径可以从一个“可解释的”模型直接通向信任和使用你的模型的用户。相反,这是一个固有的混乱和反复的过程。
罗伯特·德格拉夫的书《管理你的数据科学项目》》已经通过出版社出版。
算法公平吗?
Photo by Markus Spiske on Unsplash
人工智能将如何改造我们的社会,代价是什么?正如总统候选人杨安泽已经承认的那样,我们正处于第四次工业革命的早期阶段。这种质疑源自对旧制造业经济的怀旧语言,以及对复杂算法公平性的质疑。
推动算法透明
算法是在有限的步骤中解决问题的一组规则。让计算机算法成为潜在争议的是操作算法的非透明性。虽然像谷歌这样的公司在网上详细讨论了他们的过程,但这种编程的内部运作仍然模糊不清。缺乏透明度使得偏见和审查的指责持续存在。电子隐私信息中心(EPIC)是算法透明的著名倡导者。7 月 16 日,EPIC 致信参议院委员会主席特德·克鲁兹参议员,谴责谷歌搜索引擎的各种危险。EPIC 声称,“内容可以根据政府设计的分级系统进行标记和分类,以实现审查并阻止政治反对派的访问”,“大多数用户不知道算法过滤如何限制他们对信息的访问,也没有禁用过滤器的选项。”
在线服务提供商的过滤能力是众所周知的。不管是有意还是无意,这种缺乏透明度都会带来后果。最近,总统候选人 Tulsi Gabbard 决定起诉谷歌涉嫌“干扰选举”谷歌承认在第一次民主党初选辩论后暂停了加巴德的账户;然而,谷歌声称,其自动系统会标记所有广告客户账户上的异常活动,“以防止欺诈和保护我们的客户。”谷歌很快恢复了她的账户。在参议院司法委员会的听证会上,谷歌全球政府事务和公共政策副总裁凯伦·巴蒂亚向参议员特德·克鲁兹保证“我们会努力改正错误。但这些错误影响了双方,并不是偏见的产物。”
这场讨论中遗漏的一个关键细节是,像谷歌这样的公司的商业模式依赖于广告商。“广告商和公司都厌恶风险,并寻求避免争议,”正如我之前在写的。谷歌的平台与其创收能力发生了冲突。在某些情况下,用户寻求一个非过滤平台,但是谷歌必须确保某种程度的保持,以便广告商继续利用他们的平台。
挑战大科技
EPIC 的观点直接挑战了这些平台所谓的偏见。改革派和保守派同样也因为反垄断的原因而挑战大科技的算法。虽然垄断通常是通过垂直整合产生的,但其中一些公司可能正在使用他们的算法来人为地推广自己的产品。EPIC 指称“谷歌收购 YouTube 后,EPIC 的搜索排名下降。谷歌用自己主观的“相关性”排名取代了客观的搜索标准。结果是“谷歌的主观算法更喜欢 YouTube 上的谷歌视频内容。”甚至最高法院也允许应用开发者起诉苹果违反反垄断法。开发者声称,通过要求“iPhone 和 iPad 用户只能从其门户网站下载应用程序,同时从商店的部分销售额中提成”,苹果已经成为垄断者。
7 月 23 日,美国司法部启动了“对主要科技公司的全面反垄断调查” ABC 新闻指出,“目前对美国反垄断法的解释显然不适用于提供廉价商品或免费在线服务的公司。”因此,司法部可能发现很难证明这些公司是垄断;另一方面,欧盟因谷歌违反反垄断法对其处以创纪录的 50 亿美元罚款。这些联邦调查类似于发生在 19 世纪末 20 世纪初的破坏信任案。
大型科技公司担心政府干预他们的运营是有道理的。要求每家公司对其算法完全透明是不可行的,尤其是因为这类似于要求任何其他公司公开其商业秘密。像谷歌这样的公司可以更清楚他们的程序和算法的意图。例如,谷歌的 Recaptcha 一直在使用人形点击来“训练谷歌的人工智能变得更加聪明”,他们声称应用“人类带宽来造福世界各地的人们”这是一种训练算法的巧妙方法,但大多数用户并不知道事实是这样的。
算法强大;然而,它们很大程度上受制于程序员的偏见。程序员可以表现出或隐或显的偏见,这就是为什么更多的透明度会让公众受益,尤其是在投诉数量巨大的情况下。
在公众对我们机构的信任度处于低位的情况下,增强这种信心将有利于谷歌和脸书这样的公司。在*《卫报》*,迪伦·柯伦写了关于脸书和谷歌储存你信息的程度,“你甚至没有意识到。”利用复杂的算法,这些公司可以利用你的搜索历史、应用程序使用情况、来拼凑各种数据点,他们甚至为你创建广告简介。在《纽约时报》上,詹妮弗·瓦伦蒂诺-德弗里斯写了关于他们如何使用和出售数据给广告商和“甚至寻求消费者行为洞察的对冲基金”的文章
在《大西洋月刊》上,卡韦·沃德尔写道“自动系统根据大量个人信息做出决策,通常不会透露计算中包含的信息种类。”随着这些算法变得更加复杂,确定哪些信息在结果中起关键作用将变得更加困难。此外,隐私倡导者有理由担心审查搜索引擎的可能性,就像谷歌在中国的项目蜻蜓一样,在美国出现。鉴于这些公司掌握着大量的数据,确保充分的保护和透明度符合我们的利益。如果他们行动不力,政府似乎随时准备干预。
国会辩论
国会正在讨论哪种法律制度最适合这些在线服务提供商。由于大数据是人工智能用来运行这些算法的燃料,这些公司必须继续主动和被动地收集数据。问题仍然是:消费者的利益在哪里起作用?
这正是法学教授乔纳森·齐特林(哈佛法学院)和杰克·巴尔金(耶鲁法学院)提出“信息受托人理论的原因,该理论要求其中一些公司充当法律认可的受托人。其他制度包括限制数据的出售或转让,取消第 230 条豁免权,给予用户访问从他们身上收集的数据的权利,禁止令人上瘾的功能,或者强迫他们向外部审计员提交他们的算法。
额外的监管负担是针对消费者的非直接税。展望未来,这些公司应该将更多的透明度融入到他们的算法决策中,即使他们可能仍然处于十字路口。不管真假,这些关于审查的指控揭示了与人工智能相关的问题。为了勇敢地面对民粹主义的反弹,大型科技公司必须做更多的事情来重新赢得公众的信任。他们可以从承认过去的错误开始,并采取更多措施防止未来的失信行为。
图表:数据隐私、营销投资回报率和令人毛骨悚然
如果你的数字营销策略令人毛骨悚然,你需要选择退出
ROI vs Creepy — A High-Level Diagram
在最近的一次行业活动中,我被邀请参加一个讨论基于位置的营销解决方案的小组。该小组面对 100 名当地营销专业人士,他们的任务是帮助当地企业或在当地有零售业务的国家品牌。他们通过各种数字营销活动将更多的人流量带到他们的实体场所。这是我们这个时代一些最重要的数据隐私问题的战场。
舞台上有我们三个人,老实说,这不是你友好的讨论之一。因为消费者位置数据在将潜在访客定位到特定商店位置方面非常有帮助,所以这种实时数据令大多数营销人员着迷。想象一下,每一个走在街上的消费者都被广告轰炸,告诉他们在哪里可以吃午餐、买咖啡,或者在哪里可以找到最便宜的汽油。谁不想要那种便利和好处呢?
事实证明, 我不要。
而台上所有的营销人员做。
你的位置和适当的价值交换
基于位置的营销的好处是显而易见的。你有一个消费者,他选择进入他们手机上的一个应用程序,这个应用程序深深埋藏在他们的隐私政策中,有权向第三方分享或出售这些数据。这极大地提高了针对该消费者的定位能力。因此,当你换轮胎时,你的孩子下载的用来打发时间的看似无害的游戏现在可以跟踪你的一举一动,并将其出售给营销人员,他们可以向你的浏览器发送广告,给你发送短信,或通过他们的应用程序联系你。有了这些信息(通常加上一天中的时间),大多数营销人员可以提高他们的投资回报率。
但是他们应该吗?
这里的问题是关于适当的价值交换。当客户下载你的应用程序或访问你的网站(弹出窗口同意除外)时,他们期待某种形式的价值交换。消费者希望要么你的复古俄罗斯方块风格的游戏很棒,要么你的应用程序提供的天气信息是准确的。从本质上说,他们期望一些不花钱或免费的东西能很好地工作,并为他们提供价值。作为交换,他们可能会期待应用程序中的一些广告,偶尔的应用程序内购买优惠,或者其他一些对他们的钱包或注意力的成本。你设计的快速同意条款和隐私(被忽略)或旨在“推动”消费者前进甚至没有真正开始公平地表达价值的不平衡。
[## 超级人类推动我们通过监视资本主义——一本畅销书文氏图
我喜欢维恩图,它们是终极的博学工具。
medium.com](https://medium.com/@wardchristianj/super-humans-nudging-us-through-surveillance-capitalism-a-bestseller-venn-diagram-9a1a6290e727)
消费者没有想到的是,你的公司使用他们的实时位置数据来出售或与第三方共享。别告诉我他们不在乎。美国全国广播公司和华尔街日报的一项新研究清楚地表明,93%的美国人希望公司明确获得使用他们个人数据的许可。如果消费者知道你在跟踪他们,然后出售这些数据(不管你在条款中隐藏的匿名承诺),他们可能会说“不”。在我们的行业小组讨论中,我的共同小组成员提出了如下评论:
“老实说,只要人们得到了价值,他们就不会介意。”
“民意调查显示人们不关心隐私问题。”
“总体而言,人们不会为脸书或其他‘免费’应用付费,因此对位置追踪和定位没什么意见。”
这些说法的问题在于,它们倾向于引用【2017 年【Morning Consult 的旧民意调查,该调查称 67%的美国人不愿意为减少或删除广告而支付服务费用。这项调查似乎得出结论,与互动广告局 (IAB)的类似发现一样,能够在正确的时间将正确的广告瞄准正确的人是物有所值的理想结果。当然,IAB 在同一报告中也指出了以下几点…
“近一半的人认为定向广告的最大好处是减少了不相关的广告”
这意味着,当被要求在更一般的广告和更有针对性的广告之间进行选择时,这些调查的受访者基本上都要求减少广告的数量。这类似于问…
“你愿意被 100 只蜜蜂簇拥着,还是只有 20 只蜜蜂知道你喜欢户外生活方式?”
当然,我们选择 20 个,但是老实说,给我看一个实际上减少他们投放广告数量的营销商,一旦他们可以更有效地瞄准你。从来没有人这么做过。他们只是展示更多(现在有针对性的)广告。
更重要的是,被引用的研究不是关于基于位置的营销。它们是关于通过饼干、电视、路边广告牌和印刷广告的在线跟踪广告。这些研究不是关于实时的、基于位置追踪的广告。我认为这正是为什么他们不能被用作消费者对位置追踪态度的有效代理。在线追踪一个人的价值交换不同于基于位置的离线追踪。《纽约时报》关于追踪消费者位置的应用程序的文章对此进行了深入阐述,这是剖析真实价值等式的一个重要里程碑。
地图上的数百万个点描绘了高速公路、小路和自行车道——每一个点都沿着一条…
www.nytimes.com](https://www.nytimes.com/interactive/2018/12/10/business/location-data-privacy-apps.html)
营销投资回报率 vs“令人毛骨悚然”
在探讨基于位置的数据定位的潜在危害之前,也许有必要解释一下(广义上)营销人员是如何走到这一步的。首先,花在营销上的每一美元的投资回报(ROI)之间的平衡是一个难题。对于营销人员来说,他们的工作是推动流量(包括数字流量和步行流量),更多数据和更好数据的吸引力是难以忽视的。他们不断希望转向更有针对性的解决方案,因为投资回报数字将会增加(如上图右侧所示。)
不幸的是,这必须用 y 轴来衡量,这是随着时间的推移,营销变得更加令人毛骨悚然的趋势。像这样的图表对每个公司来说都是独一无二的。与利用位置数据的快餐车相比,一家大型 CPG 公司可能会从经典营销策略中获得更好的投资回报,因为他们的位置不固定。不要纠结于线条的长度,也不要纠结于它们是否符合比例。更重要的是,关注每一步的主要数据类型。
在寒冷的几个月里,我们如何向东北地区的消费者推销雪铲。没有人真的介意这一点,我认为这一点也不令人毛骨悚然。事实上,这似乎是一件合乎逻辑的事情,许多营销人员从这些非人性化的综合努力中获得了绝大部分投资回报。另一个例子是在客户可能会花时间的地方购买广告。例如,如果你在银行业经营一家金融科技公司,你可以假设访问《美国银行家》( *disclosure:我为 SourceMedia 工作,是《美国银行家》*的所有者)、《金融时报》和《华尔街日报》网站的观众是很好的选择。
Your Weather & Location Apps are Stalking You.
从这里开始,大多数公司沿着 y 轴向上移动到 cookies。为什么?Cookies 真的可以帮助你从聚合达到个性化的下一个层次。它们允许在个体水平上理解数据点,如感兴趣的主题或先前的浏览会话数据。从很多方面来说,这是走向令人毛骨悚然的第一步,从这里开始是一个多么危险的斜坡。使用 cookie 数据有允许的方式,也有过于激进的方式。无论如何,公众到目前为止还不一定会对 cookie 表示强烈抗议,尽管监管机构开始真正打击 cookie 的使用,但公众总体上似乎将此视为内容和价值之间正常价值交换的一部分。
Seriously, how do you even sleep at night, Casper? (SOURCE, PUBLIC TWITTER FEED)
类似的情况是,人们似乎接受他们在一处地产上被监视,但他们并不期望从那里开始就一直被跟踪。
当我走进现实世界中的百思买时,穿着亮黄色衬衫的商店员工并没有跟着我出了门回到我的家。我会注意到,类似地,人们会注意到重新定位。
这就是为什么我认为从 cookies 到重新定位的转变是消费者心目中的一个重要区别。此时,这种活动转变为主动监视,从主动监视到目前为止,要被动得多。消费者几乎立刻就意识到了这一点。有 90,000 个关于“重新定位令人毛骨悚然”的搜索结果,许多人解释说,当你过度使用这种策略时,愤怒可能是消费者的自然反应。
SOURCE: Google Search Results
尽管如此,仅仅是查找如何使用重定向广告就有超过 900 万个结果,因为它们是有效的。事实证明,跟随潜在客户重新介绍你的产品或服务是可行的,但这可能会很快失控。在潜在客户(或卡斯帕床垫的现有客户)访问你的网站很久之后,你还应该跟踪他们吗?
基于位置的营销数据
这使我们在我们绘制的图表上从重定位跳到实时的、基于位置的跟踪。而且,虽然图表没有按比例绘制,但我要说这是在“令人毛骨悚然”的 y 轴上的一个巨大飞跃。
对大多数人来说,在现实世界中被跟踪是不可接受的。它跨越了太多的界限,是我们技术的延伸。在跟踪孩子的地方做得更深入。去重读《纽约时报》的那篇文章吧,关于你的孩子在学校时从他们的设备上发出的所有定位信号,这是令人恐惧和不可接受的。
现在,位置数据空间中的许多人说,“等等,我们只使用匿名数据。”不幸的是,这也不准确。说数据是匿名的并不等于说它不能被轻易识别。仅仅因为他们在系统中使用唯一的标识符而不是某人的真实姓名,并不意味着这是匿名的。事实上,对于基于位置的数据,这与事实相去甚远。
一个欧洲消费者监督组织对谷歌提出了隐私投诉——认为该公司使用了…
techcrunch.com](https://techcrunch.com/2018/11/27/google-faces-gdpr-complaint-over-deceptive-location-tracking/)
人是有模式的。你醒来的地方,你上下班的地方,你喝咖啡的地方,你工作的地方。通常一周有 5 天,你在同一个地点起床,每个追踪你位置的应用都知道这一点。通过简单的公共记录财产或地址信息,从你的手机传回的 GPS 坐标,公司可以确定确切的地址和该地址的所有者。此外,如果您大部分时间都在同一个办公室或工作地点上班,这还可以确认您的身份。知道家庭地址和公司地址通常足以在基于位置的数据库中“重新识别”任何人。
等等,你怎么知道我的位置?
最近,Foursquare 推出了一款名为“超趋势”的新应用:
该热图旨在向您展示和分享来自使用其应用程序或利用其位置服务工具的人们的信息。在奥斯汀 SXSW,你可以看到热点在哪里,如果你是一个内向的人,最好不要去哪里。这些地图利用了 Foursquare panel 的数据,换句话说,它不一定拥有每个人的位置,更多的是利用一群选择加入的用户来推断数据的趋势。如果不从数学上探讨这种方法的问题,主要问题是 Foursquare 完全理解这里存在隐私问题,并使用这款应用程序作为与客户对话的方式。
一位行业专业人士的初步回应完美地表达了这种担忧:
Does GDPR Demand Apps Sharing Data to be Identified? (Source: Public Twitter Feed)
许多人仍然不明白的是,像 Foursquare 这样的公司向其他应用程序提供的 SDK 或软件开发工具包允许他们访问你的位置数据。换句话说,你可能不使用由 Foursquare 构建的或以 Foursquare 为品牌的应用程序,但你肯定仍然有他们的代码在你最喜欢的应用程序的后台运行。这也绝不是在敲打 Foursquare。他们已经建立了一个出色的框架来嵌入位置感知功能,问题是谁知道这一点,以及它的用途是什么?
问题比比皆是:
哪些平台使用 Foursquare 数据和位置服务?
然后 Foursquare 把这些数据卖给谁?
向应用程序提供这些位置服务的其他平台有哪些,我如何选择退出?
许多人意识到 Foursquare 正在试水,但也微妙地揭示了他们的 SDK 或位置服务平台正在不仅仅是他们自己的应用程序的背景下运行。正如他们所说,“来自我们自己的应用程序或使用我们技术的其他应用程序的混合数据。
事实是,他们向世界展示的“令人毛骨悚然”的地图视图是每个基于位置的跟踪系统的一部分。Foursquare 只是首批让世界真正看到(并使用)他们多年来拥有的数据的后端视图之一。当处理位置数据的平台试图筹集资金或“惊艳”投资者或合作伙伴时,他们通常会展示这种类型的地图,对用户进行实时或接近实时的位置跟踪。我见过无数来自定位服务平台的“酷”地图视图,它们通过利用手机定位 pings 或 Wi-Fi 热点信号跟踪来显示人类群集效应。
伤害?
所有这些的真正问题是“有什么危害?”实际上,Foursquare 正在展示这一点,并声明所有这些数据都是完全匿名的,因此,在使用中是可以接受的。那可能是真的,也可能不是。例如,我当然认为我们在城市规划和紧急疏散或其他民事演习中看到的一些研究值得抓住机会。通过利用实时位置统计数据,以更智能的模式安排车辆的路线,甚至交通模式也发生了巨大变化(或者,不那么智能的)。
我们看到的危害不一定是 SXSW 的热点匿名地图。坏处是这永远不会停止。危害在于,应用程序不会通过访问个人的位置数据来匿名化个人,而是根据他们的位置专门针对这些个人提供广告和其他优惠。虽然 Foursquare 似乎没有分享使用其位置服务的每个应用程序的列表,但你可以肯定的是,他们正在使用位置数据,专门针对那些进出特定位置半径点或多边形的人投放广告。
底线是,你真的需要考虑这些活动,以及投资回报是否值得你的(目标)观众的潜在愤怒或担忧。仅仅通过优化上图中的蓝色阴影区域,就可以获得大量的投资回报。这些活动大多被你的受众接受为“经典”的营销活动,甚至是合乎逻辑的。
数据隐私正在继续发展,在美国,广告集团正联合起来游说国会颁布一项国家隐私法。虽然他们的努力是帮助公司避免各州的隐私法规的拼凑,但营销人员必须接受他们在追求投资回报时已经越过了界限。数据隐私是关于理解人类的基本权利,基于位置的数据是一个关键的转折点。
这是关于企业数据战略变化本质的三篇系列文章中的第二篇。摘自数据…
www.information-management.com](https://www.information-management.com/news/understanding-the-true-nature-of-data-and-the-rights-of-its-subject)
在以后的帖子中,我们将讨论同意和围绕同意的价值主张交换。明确地说,当消费者主动允许并有意让你的公司跟踪他们的物理位置时,这不是问题。事实上,它可以是用户和你的公司之间的一个伟大的伙伴关系。我只是愿意打赌,价值交换,用户从你的公司分享他们的实时位置数据中获得的等式目前是错误的。如果他们真的知道你在追踪这些数据,他们可能会要求你的广告收入分成或其他类似的价值。他们没有问的事实恰恰突出了他们不知道你在用这些数据做什么。
同样,如果你在寻求投资回报的过程中采取的营销策略进入了“令人毛骨悚然”的领域,我们强烈建议你退出。
信息信托理论与市场
Photo by Firmbee.com on Unsplash
不断变化的世界需要新的社会观。鉴于以技术为基础的公司的影响和审查,我们必须分析新提出的法律理论。消费者经常听说脸书的违法行为,最近导致美国联邦贸易委员会对 T2 罚款 50 亿美元。消费者委托这些机构充分保护个人信息。此外,这些机构继续向公众展示自己是负责任和正直的组织,致力于为用户提供最佳体验。它们为消费者提供了曾经被认为不可想象的服务,但这种服务是有成本的。他们的服务、公众表现和广泛的数据收集意味着他们可能确实是“信息受托人
耶鲁大学法学院宪法和第一修正案教授杰克·m·巴尔金在加州大学戴维斯分校题为“信息信托和第一修正案”的法律评论中讨论了“信息信托”一词。巴尔金的理论依赖于宪法律师之间关于特定隐私法是否违反第一修正案的争论。第一修正案法律是复杂的,它被分为三类,包括公共演讲,政治演讲和商业演讲。法院经常发现很难区分公共话语和商业言论,并推翻了限制“基于内容或基于说话人的对获取信息和用于营销目的的言论的限制”的法律。巴尔金的理论依赖于利用普通法理论,即在线服务提供商和社交网站(如脸书或谷歌)的受托人。这一理论几乎通过《纽约隐私法》变成了公共政策。
什么是受托人?
受托人(如律师或财务顾问)的任务是代表客户的最大利益,同时保持足够的灵活性来代表客户行事。在信托关系中,客户处于弱势地位,理所当然地信任和信赖受托人。正如巴尔金所写的,“在某些情况下,你可能与在线服务提供商有信托关系,特别是如果你必须信任和依赖他们,他们反过来会鼓励你的信任和依赖。”例如,谷歌知道大多数互联网用户依赖它的搜索引擎。如果谷歌直接偏向他们的搜索算法以支持他们偏好的政治立场,那么他们将直接侵犯用户获得公平平台的权利。正如温斯顿·丘吉尔所说,“未来的帝国是思想的帝国。”
自由营销者会理直气壮地反驳互联网用户可以自由使用其他搜索引擎。尽管谷歌在市场份额上几乎完全占据主导地位,但用户可以使用搜索引擎,如必应或雅虎。这些平台的市场份额要小得多,但很少有关于其公司滥用职权的重大披露。的确,平台越大,出错的空间就越大。这正是信息受托人的理念如此引人注目的原因。如果像脸书这样的平台在法律上被要求充当用户的受托人,那么个人信息的收集将是透明的,网络安全将是优先事项,含糊不清地强制执行“社区标准”将是不可能的。
市场可以解决这个问题
实际上,这一法律制度可能是不必要的。社交媒体用户开始离开这些平台,因为他们的负面情绪和对令人发指的事件的持续关注。已经有研究证明了社交媒体对心理健康的负面影响,因为它可能加剧社会孤立感。由于这些问题,每天都有新的平台产生。虽然 Myspace 曾经是“美国访问量最大的网站”,但现在它在年轻人中基本上不为人知。社交趋势会随着时间而变化,除非平台遵循用户偏好,否则它们将变得无关紧要。“那么,Myspace 怎么了?“除了重新投资自己,并在今天的 Snapchat 过滤器和 Instagram 故事时代保持相关性之外,没有什么,”Sam Brodsky 在 Metro 的 中写道。
这就是资本主义的美妙之处,也是“创造性破坏”的理念。今天的主要技术公司并没有十年前的现代规模,十年后它们也完全有可能不再具有相关性。“公司希望保持竞争优势,”巴尔金指出。这是我们政策制定者辩论中遗漏的关键细节。雅虎旗下的互联网搜索引擎 AltaVista 领先于谷歌。Myspace 领先于脸书。易贝先于亚马逊。就在我们说话的时候,下一家大型科技公司可能正在筹建中。
将信托的法律理论应用于一些科技公司似乎是必要的,但正如约瑟夫·熊彼特所说,“我们正在处理一个有机的过程。”只要政府不进行不必要的干预,市场解决这类问题的能力是不可避免的。“通常被形象化的问题是资本主义如何管理现有结构,而相关的问题是它如何创造和摧毁它们,”熊彼特写道。为了充分把握我们当前的形势,我们必须认识到市场是如何随时间变化的。
信息信托理论为我们提供了一个监管这些公司的法律框架。鉴于资本主义的动态能力,我们必须要求这些公司在收集、出售和保护个人信息方面更加透明和严格。目前的情况肯定是行不通的,这就是为什么这些公司应该为用户提供“知情权”和“选择退出功能。不幸的是,这些平台中的一些似乎满足于政府干预,只要政府干预允许它们经受住政治和媒体的审查。政府干预可能会提供暂时的安慰,但是的代价可能会比预期的更大。历史表明,市场在解决我们社会的差距方面发挥了建设性的作用。只要有足够的压力,我们就有能力建设一个更加安全的未来。
第一胎婴儿更有可能晚育吗?
是的,也更有可能是早期的。但只是一点点。
如果你怀了第一个孩子,你可能听说过第一个孩子更容易晚育。此外,你可能听说过他们更有可能早到。事实证明,两者都是真的。
- 如果“早”是指早产——怀孕 37 周之前——第一胎婴儿更有可能是早的。根据全国家庭成长调查记录的活产婴儿,大约 12%的第一胎婴儿早产,相比之下,其他婴儿为 10%。
- 如果“晚”是指 40 周后,第一胎婴儿更有可能晚出生:大约 15%,相比之下其他婴儿只有 10%。
下图显示了活产儿(不包括多胞胎和剖腹产分娩)的妊娠长度分布情况:
Distribution of pregnancy lengths for full-term single births. The shaded areas show 90% confidence intervals.
第一胎婴儿在 39 周时不太可能“准时”,更可能晚一点,在 41 到 43 周之间。
在足月妊娠中,第一胎婴儿的出生平均要晚 1.3 天。但是平均并不能说明全部。
还要多久?
假设你在第 37 周的开始。此时距离分娩的平均时间为 2.8 周。
两周后,在第 39 周开始时,平均剩余时间为 1.2 周。如你所料,随着每一周的过去,平均剩余时间会减少。
但之后就停止了。
下图显示了产科最残酷的统计数据:怀孕每一周开始时计算的平均剩余时间:
Average remaining time at the beginning of each week of pregnancy, for live births, excluding multiple births and deliveries by C-section.
在第 39 周到 43 周之间,分娩前的剩余时间几乎没有变化。时间在流逝,但终点线却一直朝着未来前进。
在第 39 周,如果你问医生孩子什么时候出生,他们会说“任何一天”如果你在第 40 周再次询问,他们会给出同样的答案。在第 41 周。这听起来可能令人沮丧,但他们是对的;差不多五个星期,你总是差一个星期。
对于第一胎婴儿来说,这种情况更糟糕一些。下图显示了第一胎婴儿和其他婴儿的平均剩余时间:
Average remaining time at the beginning of each week of pregnancy for first babies and others.
在第 39 周开始时,头胎婴儿的平均剩余时间为 1.3 周,其他婴儿为 1.1 周。相差约 36 小时。
这种差距持续了一周左右,但在第 41 周之后,第一个婴儿和其他婴儿是无法区分的。
也许这个星期?
当你为怀孕的最后几周做计划时,到分娩的平均时间并没有太大的帮助。您可能更愿意在每周开始时知道在接下来的七天内交付的概率。
下图回答了第一个婴儿和其他婴儿的问题:
Probability of delivering in the next week, computed at the beginning of each week.
在第 37 周开始的时候,如果你想的话,你可以打包一个袋子,但是只有 6%的机会你会需要它,不管是不是第一个孩子。
在第 38 周开始时,下一周分娩的几率约为 11%,不会高太多。
但在第 39 周开始时,这一比例要高得多:头胎婴儿为 54%,其他婴儿为 61%。
这种差距持续一周左右;第 41 周后,两条曲线实际上是相同的。
这些差异是真实的吗?
这篇文章中的结果可能反映了第一胎婴儿和其他婴儿之间真正的生物学和医学差异。在这种情况下,它们很可能是预测性的:如果你正在期待你的第一个孩子,平均来说,你将不得不比随后的生育等待更长一点的时间。
但是这些结果可能是由于测量误差造成的。
- 按照惯例,怀孕的持续时间从母亲最后一次月经的第一天开始计算。报道的长度可能不准确,对第一次做母亲的人来说可能不太准确。
- 此外,NSFG 的数据是基于采访,而不是医疗记录,所以它依赖于受访者的记忆。对于第一胎婴儿,报道的长度可能不太准确。
但是,即使第一个婴儿的测量误差不同,也不清楚为什么他们会偏向更长的持续时间。
头胎婴儿和其他婴儿之间的明显差异也可能是由与怀孕时间相关的混杂因素造成的。
- 如果一个妇女的第一个孩子是通过剖腹产分娩的,那么随后的分娩更有可能被安排好,而不太可能晚。为此,我排除了剖腹产分娩。
- 如果第一胎婴儿不太可能被诱导,更多的婴儿将被允许晚育。我不知道他们会是什么原因,但数据集没有引产的信息,所以我不能确认或排除这种可能性。
我展示的结果具有统计学意义,这意味着如果第一胎婴儿和其他婴儿之间没有差异,我们就不太可能看到这些差异。从 2002 年到 2017 年的调查过程中,结果也是一致的。所以这种明显的差异不太可能是随机抽样造成的。
更多阅读
这篇文章基于我的书《Think Stats:用 Python 进行探索性数据分析》中的一个案例研究,你可以从绿茶出版社免费下载这本书。它也可以从奥赖利媒体 ( 亚马逊联盟链接)获得纸质和电子格式。
我在博客里发表了一篇类似的分析(基于更老的数据) 大概是想多了 ,在这里可以读到更多关于数据科学和贝叶斯统计的文章。
如果你喜欢这篇文章,你可能也会喜欢“检验悖论无处不在”,这是关于一个令人惊讶的无处不在的统计错觉。
方法学
我使用了来自全国家庭增长调查 (NSFG)的数据,该调查“收集了关于家庭生活、结婚和离婚、怀孕、不孕、避孕措施的使用以及男女健康的信息。”
该数据集包括 43 292 例活产的记录,其中我排除了 737 例多胞胎和 11 003 例剖腹产。我还排除了 3 例妊娠持续时间超过 50 周的病例。这一分析是基于剩余的 31 906 个案例。
NSFG 是美国居民的代表,但它使用分层抽样,所以一些群体被过度抽样。我使用了加权重采样来校正过采样,并生成图中所示的置信区间。
数据清理、验证和重采样的细节在这个 Jupyter 笔记本中。分析的细节在本笔记本中。
关于作者
艾伦·唐尼是马萨诸塞州奥林学院的计算机科学教授。他和妻子有两个女儿:第一个女儿提前一周出生;第二次是晚了两个星期,在一点鼓励之后。
《辣妹》观众性别歧视吗?
深入分析
根据对 YouTube 评论的文本分析,可能有一点
热门人物,“热点问题和更热翅膀的节目”,已经成为一个奇观。自 2015 年四年前首次亮相以来,YouTube 访谈节目的人气稳步增长。大约九个月前我看了我的第一集。从那以后,这个热门词汇似乎每隔几周就会出现在人们的对话中。
对于那些不熟悉的人来说,热门人物主持人肖恩·埃文斯每集采访一位名人。热门人物和其他名人访谈有什么不同?首先,肖恩是一个优秀的面试官。第二,也是最明显的,肖恩和他的客人在整个采访中吃了一大盘越来越辣的鸡翅。它极具娱乐性——如果你从未看过,我推荐你先看看最近在 播出的一集,我们先来享受一下 YouTube 频道。
最近,我的一个朋友提到,以女性为主角的热门剧集似乎比以男性为主角的剧集受到更多性别歧视(或者至少是负面的)评论。我很容易相信这种说法至少有些道理。找到一些证据当然并不困难——翻阅最近关于一集女嘉宾的评论,你会很容易找到性别歧视或物化评论的例子。
那次谈话让我开始分析思考。一些精心挑选的例子很容易成为确认偏差。有没有可能客观地显示女性客人比男性客人得到更多的性别歧视或负面评论?
定义目标
有一堆热门的 YouTube 视频,其中一些有女嘉宾。每个视频都有一堆评论。我们的目标是使用统计学和数据科学来确定对女性客人的评论是否不同于对男性客人的评论,这种不同可以被描述为性别歧视。听起来很简单,但是…
计算机擅长处理黑白问题。它们非常擅长遵循定义的指令和执行复杂的计算,但它们不能像人类那样做出判断。性别歧视绝不是一个非黑即白的问题。看到就知道,但是很难定义。两个人有理由不同意某个评论是否是性别歧视。同样的评论在一种情况下可能是性别歧视,但在另一种情况下可能不是。这是一个微妙的概念。
换句话说,教计算机识别性别歧视(或种族主义、仇恨言论等。)是辛苦的。在社交媒体时代,这也是一个非常重要的问题,但还没有人提出一个很好的解决方案。如果你感兴趣的话,这篇由格伦达尔等人撰写的论文可以让你一窥该领域的研究现状。
方法和结果
与仇恨言论检测领域的前沿研究相比,我将采取一种简单的方法。大多数仇恨言论检测技术基于在标记数据集上训练的分类模型。这种方法可能是解决当前问题的最佳方式,但是在我的数据集上复制这些模型需要花费大量的时间和精力。相反,我将采取一种间接的方法来识别性别歧视,这种方法使用更快、更现成的技术,如下所述。
所有的分析都是使用 Python 完成的,并且可以在 GitHub 库中获得。这篇文章中显示的数据和可视化可以在知识库中的 Jupyter 笔记本中找到。
数据概述
该数据集包含了 YouTube 上对前八个热播季视频的所有评论——总共有近 139 个视频和超过 100 万条评论。我根据视频中是否有女嘉宾将数据集分成两组。这意味着,如果其中一位嘉宾是女性,那么有多位嘉宾的视频将被归入“女性嘉宾”组。
总共有 23 个视频有女嘉宾,116 个没有。这是一个巨大的差异!辣的大概应该多争取点女嘉宾吧!(在最近几季中,女性出现的频率更高了,但仍没有一季是女性占 50%的。)
情感分析
我们寻找性别歧视迹象的第一种方法是进行情感分析,这是最基本的自然语言处理技术之一。情感分析获取一些文本——在我们的例子中是 YouTube 评论——并分配一个分数,将其情感分为积极、消极或中性。在该分析中,情绪得分从-1 到 1,其中-1 是最消极的,0 是中性的,1 是最积极的情绪。
我们潜在的假设是,性别歧视的评论通常会带有强烈的负面情绪。因此,如果有女性嘉宾的视频有大量性别歧视的评论,我们会认为这些视频的平均情感得分较低。
让我们通过看克莉茜·泰根事件中的几个例子来简单地检验情感分数是否是性别歧视的合理代表。我们从这个视频上情绪得分最低的评论开始。在一个巨大的 -0.997 情绪得分中,我们有这个宝石(有一些审查):
请不要再在这个节目里带一袋恶心的丑东西了!你为什么要带那个看起来像*** 的花栗鼠来这里?她是如此令人讨厌,她的脸是可怕的,她的声音是可怕的,我个人甚至不知道她为什么出名,除了嫁给了 JL。我真希望这个*****会死你这个丑**** !你太恶心了你****肥头大耳的荡妇淫妇***** ***!死啦死啦死啦死啦死啦
我认为那条评论是公然的性别歧视。所以至少,我们知道,通过寻找低情绪得分,可以找到极端性别歧视的评论。
然而,我们知道我们会遇到一个问题:评论可以是负面的,但不带有性别歧视。比如这条评论的情感分 -0.94 :
地狱不吃大坝翼。你知道你要去辣的。什么?浪费翅膀。可惜删了一集。重拍第七季第一集 SMH。
这个人显然对 Chrissy 没吃鸡翅就把辣酱舔了下来很不高兴。负面情绪得分似乎是准确的,但这个评论在我看来没有性别歧视。像这样的评论会给我们的数据增加噪音。低情感分数会识别出大量性别歧视的评论,但它们可能会识别出更多负面但非性别歧视的评论。
另一个潜在的问题是情感分析器的质量。语言是复杂的,现代情感分析远非完美,所以我们应该预料到一些评论会被错误分类。例如,这条评论的情绪得分为 -0.91 ,但它实际上似乎是积极的:
克里斯无疑是个野蛮人!!她杀了它!!光舔酱更糟糕
这里的观点是,评论者对 Chrissy 处理辣酱的能力印象深刻,所以这应该被归类为积极的评论。情绪分析者不同意,可能是因为像“野蛮人”和“被杀”这样的词,它们通常有负面含义。
因此,情感分析似乎给了我们一个体面的,但肯定有缺陷的,发现性别歧视评论的方法。回到手头的问题。热门人物评论中是否普遍存在性别歧视?让我们为每个视频计算一个“正面比率”,定义为正面评论的数量除以负面评论的数量。下图显示了男女嘉宾视频的正比率分布,不包括第一季的 outlier⁴:
Figure 1: Distribution of positive ratio for videos with male and female guests.
男性嘉宾的峰值更靠右,表明有男性嘉宾的视频往往有更高的阳性率。果然,有女嘉宾的视频平均正面比为 2.12,而有男嘉宾的视频平均正面比为 2.20。
然而,这不是一个很大的差异,我们的样本量相当小。t 检验(对不起,Bayesians)可以帮助我们决定两组(男性和女性)的平均阳性比率之间是否有任何有意义的差异。t 检验将返回 p 值-低于 0.05 的值通常被认为具有统计学意义。在我们的例子中,t 检验结果返回 0.58 的 p 值,表明我们的组之间没有统计学上的显著差异。
总之,基本的情感分析可能会显示出热门视频评论中性别歧视的极小数量的证据,但这些证据远非决定性的。
毒性分数
谷歌有一个名为视角的工具,专门用来识别“有毒”评论。Perspective 给可能被认为是虐待或骚扰的评论分配一个高毒性分数,性别歧视肯定属于这些类别。它在概念上类似于情感分析,但有更具体的重点,非常适合我们的用例。我将使用透视“毒性”和“严重毒性”评分,因为我认为这些是最类似于性别歧视的可用选项。
让我们看看毒性评分如何评价之前引用的克莉茜·泰根视频中的评论。记住,这些评论中有一条是性别歧视的,另外两条不是。我们的目标是找到一种度量标准,将性别歧视的评论与其他评论区分开来。
Table 1: VADER sentiment score and Perspective toxicity scores for comments on the Chrissy Teigen video.
正如我们之前看到的,情感分数在区分性别歧视评论方面做得很差——所有评论都有非常相似的情感分数。毒性评分,尤其是严重毒性,要好得多。性别歧视的评论得到了很高的毒性分数,而其他评论得到了较低的分数(尽管仍然没有那么低——毒性分数从 0 到 1)。
公平地说,这是一个经过精心挑选的例子。在数据集中还有其他例子,毒性分数并不比情感分数好,因为与情感分数非常相似,毒性分数仍然会与书面 language⁵.的细微差别相冲突也就是说,毒性评分似乎在区分性别歧视和负面但非性别歧视的评论方面做得更好。
让我们画出所有视频的毒性分数。下图显示了所有视频的平均毒性和严重毒性 scores⁶的分布,再次排除了第一季的 outlier⁴:
Figure 2: Perspective toxicity and severe toxicity scores for videos with male and female guests.
与男性分布相比,女性分布似乎向右侧偏移(尽管男性游客的最极端得分甚至更向右延伸)。事实上,女性客人的平均毒性为 0.306,平均严重毒性为 0.204,而男性客人的平均毒性略低,为 0.297 和 0.200。
然而,与之前的情绪得分一样,差异非常小。t 检验给出毒性评分的 p 值为 0.36,严重毒性评分的 p 值为 0.69。这两个 p 值都与传统意义上的统计显著性相差甚远,因此我们不能自信地声称毒性评分已经确定了两组之间的差异。
毒性分数让我们和情感分数处于几乎相同的位置。有一点证据表明,女性会收到更多恶毒的评论,但从统计学的角度来看,这一证据并不令人信服。
单词用法
让我们稍微改变一下。到目前为止,我们已经采取了非常量化的方法,试图找到一个量化性别歧视(或仇恨,有毒等)的度量标准。)评论在每个视频上。现在让我们看看我们是否能找到两组评论中使用的语言的差异。
总体思路很简单。对于评论数据集中的每个词,我们想知道这个词是在男性评论还是女性评论中出现得更频繁。我们将拟合一个模型,告诉我们任何给定的词在与女性嘉宾的视频评论中被使用的可能性有多高(或多低)。一旦我们有了自己的模型,我们就可以查看每组的热门词汇,并寻找它们之间的差异。
具体来说,我用多项似然性和信息量丰富的 Dirichlet 先验实现了贝叶斯模型,这在 Monroe 等人的这篇论文中有所描述。技术细节对于理解结果并不重要,但如果你的眼睛在上一句结束时没有呆滞,请阅读这篇论文——这是解决这类问题的一种优雅的方法。该论文的作者使用该模型来识别民主党人和共和党人的演讲差异,这与我们自己的任务没有太大区别。
在拟合模型之前,我执行了一些小的预处理步骤,比如词汇化和删除标点符号(NLP 中的常用技术)。我还用一个通用的符号替换了性别代词,用一个通用的符号替换了客人的名字。通用标记防止这些术语主导结果——像“她”和“她”这样的词在女性嘉宾的评论中使用得更频繁,但这并不有趣。
下表显示了与女性和男性 guests⁷:相关的前 30 个词和二元模型
Table 2: Top 30 words and bigrams for female and male guests according to the informative Dirichlet model.
花些时间通读这些列表,看看你是否注意到任何有趣的不同。以下是我看到的一些例子:
- 女性名单中有很多描述身体外貌的词,如“美丽”、“可爱”、“华丽”。很高兴看到这些话是积极的,但这可能是评论者物化女性并主要关注她们的外表的证据(请注意男性是如何不包括“英俊”的)。
- 女单里有几个负面词,特别是“烦”。如果你在一个有女嘉宾的 Hot Ones 视频上看到一些评论,用不了多久就会发现一条评论形容她很讨厌,所以看到这个人上榜我一点也不奇怪。
- 男性排行榜榜首有很多骂人的话。我不太确定这是怎么回事,因为上下文对这些词很重要。这些评论中有很多可能是负面的,但其中一些可能会夸大男性毒性分数——当诅咒语用于正面的 context⁵.时,这些分数是不可靠的
- 男单有很多《有史以来最好的一集》的变奏。我认为这里有些隐含的性别歧视。平均而言,评论者似乎偏向于以男性为主角的剧集。
- 男性排行榜有“最搞笑”、“笑”,甚至还有😂表情符号。这符合男人比女人更有趣的文化观念(这可能不是真的)。
让我们更深入地探讨最后一点。下表显示了一些“有趣”的 bigrams⁷和它们在模型中相应的 z 分数,这告诉我们这个词在男性或女性评论中有多常见。
Table 3: A deeper look at “funny” comments.
在热播节目中有很多有趣的女性,但是很明显,评论者平均认为男嘉宾比女嘉宾更有趣。这位模特甚至将“不好笑”和“不好笑”与女嘉宾联系在一起。这很难证明,但我认为这里有一丝性别歧视。我怀疑许多评论者是故意宣称男人比女人更有趣,但似乎确实有一些潜意识的偏见。
结论
那么,我们在热门评论中找到性别歧视的证据了吗?算是吧,但不是压倒性的。情绪分析和毒性评分提供了一点点证据,但它很容易被认为是统计上无关紧要的。词汇用法分析说明了男性和女性视频评论之间的一些词汇差异。这些差异似乎有点性别歧视,但它们也是一个开放的解释。
如果被追问,我会说是的,在热门评论中有性别歧视的证据。我认为这个词的用法分析令人信服地确定了一些性别歧视的主题。你不同意吗?我是确认偏见的受害者吗?请在评论中告诉我。
脚注
[1]:具体来说,我的数据集包含了我在 2019 年 5 月中旬刮到的日期之前的所有评论。我只包括基本级别的评论,即不回复评论。我还从分析中排除了一些视频:第二季的假日特辑(没有任何嘉宾),史蒂芬·科拜尔深夜秀集(不在热门频道播出,所以大概是不同的观众),以及马雷欧·巴塔利集(在 YouTube 上不可用)。我写了一个 Python 脚本,它访问这个网络抓取器来抓取评论数据(谷歌提供了一个 API,但是它每天只能抓取 10000 条评论)。
[2]:我使用了 VADER 情感分析模型,这是一个为社交媒体文本设计的基于规则的模型。原纸这里是这里是。
[3]:Jupyter 笔记本随附的中对正比率指标进行了更详细的描述。
[4]:第一季被排除在这个情节之外,因为我把它当作一个离群值。请参见 Jupyter 笔记本附带的以了解理由。
[5]:例如,诅咒语几乎总是导致高毒性分数,即使实际上并没有毒性或仇恨情绪。参见前面提到的 grndahl 等人论文中的表 7。
[6]:对于情感评分,我们使用了正比率指标,因为大多数评论的评分完全是中性的(得分= 0)。我们在毒性分数方面没有同样的问题,所以使用平均毒性分数作为我们的评估指标更简单。
[7]:为了给出更好的单词样本,这些列表被稍微编辑了一下。我根本没有打乱列表,但我确实删除了一些与列表中出现位置较高的单词非常相似的单词。完整结果可在 GitHub 上获得。
成为媒体会员访问成千上万作家的故事!
神经网络接近生产真正的艺术了吗?
神经网络是一种算法——一种获取信息、以某种方式处理信息并产生输出的过程。在我看来,它们是当今人工智能和机器学习领域最惊人成果的来源。这些算法的版本已经被设计用来完成以前认为计算机不可能完成的任务,例如制作假人脸,比世界上最好的医生更好地预测疾病,以及有一天可能让自动驾驶汽车塞满高速公路。
取决于你如何定义创造力,这些算法的版本正在被开发,可以说是创造性的。两个例子:
这些是从未存在过的人的照片。一个神经网络被展示了确实存在的人脸图像,它学会了如何编造自己的梦。
These people don’t exist (https://bgr.com/2018/12/18/nvidia-ai-fake-faces-look-100-percent-real/)
这个神经网络学会了如何接收一张照片并输出一幅看起来像同一场景的画的图像——如果你想让它看起来像莫奈、梵高、塞尚或浮世绘画的,你可以选择。它还可以做其他很酷的事情,比如让夏天的场景看起来像冬天的场景。
Style transfer and other cool applications (https://junyanz.github.io/CycleGAN/images/teaser_high_res.jpg)
如果你把这些技术结合起来会怎么样?结果会是“自动艺术”吗?使用 Net A 生成假脸。然后使用网络 B 来设计它们,就好像梵高画了一幅假人物的肖像。瞧,你有了一个能快速想象肖像的网络。同样,假设你想要一幅梵高风格的风景画。训练一个制作假风景而不是人脸的 Net A 版本。然后用网 B 来定型。完成——自动景观生成器。
但这真的和人类制造艺术一样吗?当然,网 A 创造了一个新面孔。但它只能将以前见过的面孔的元素组合起来,组成一张新的面孔;鉴于它只看过老年人的脸,它无法运用创造力想象出一个孩子的脸。此外,B 网剽窃了一位真正的艺术家的“风格”,这位艺术家发展了这种风格。
这种过程离“真正的”、“创造性的”一代艺术还有多远?我不打算对这一点进行客观的论证。我觉得提出这样一个论点的想法既可笑又没有吸引力。我不确定这是否可能,因为“艺术”这个词对不同的人来说可能意味着很多不同的东西;当你使用的术语变化如此之大时,你如何展开一场辩论?此外,我认为真正的乐趣在于探索从这种思考中产生的有趣的思路。
例如,也许我们可以从“影响”的角度来看待这种情况。艺术、音乐等的历史学家。经常讨论是什么影响了艺术家的成就。有多少画家因为梵高的作品而改变了绘画方式?有多少音乐家开始演奏音乐是因为他们在埃德·沙利文秀上看到了甲壳虫乐队并听了他们的音乐?
我认为这是一个合理的假设,艺术家将他们影响的元素不同程度地融入到他们的作品中。在一个极端,我们有一个“非原创艺术家”,他试图精确地复制其他人的作品——他们所有的有意识的努力都是由之前的作品指导的(也许还有随机出现的错误)。在另一个极端,也许我们有创作非常新颖作品的新颖艺术家。我能想到产生这种创意的几种方式(我肯定还有其他方式):
小说艺术家 A)这位艺术家的独创性是将以前没有以那种方式结合的各种影响融合在一起的结果。也许这位艺术家通过从大量的影响中汲取一点点灵感来实现自己的风格,这样最终的结果与所有的个人影响截然不同。另一方面,也许它们融合了一种单一的影响,而这种影响以前没有与它们的其他影响结合在一起。
小说艺术家 B)这位艺术家融合了与他们之前的艺术家无关的外部影响;例如,小说艺术家可能会旅行到另一个星球,看到一种其他人从未见过的景观,然后将这种体验融入他们的艺术中。更一般地说,假设你有一位艺术家,他有一种别人从未体验过的体验,或者他们可能以一种别人从未体验过的方式处理一种体验。思想、情感等。从那次经历中得到的东西会给他们的作品注入新鲜感。
我认为网 A 类似于小说艺术家 A 是有争议的;网络可以看到大量的面孔,然后将它看到的每张面孔的一点“影响”结合起来,形成一张全新的、原始的面孔。Net B)更像是没有独创性的艺术家;他们只是试图复制。
现在假设你开发了“升级版网络 B”,一个可以将绘画风格应用到图像上的网络,然而它也可以将梵高和塞尚的风格结合起来。现在你可以用网络 A 生成原始的面孔,然后用升级后的网络 b 生成某种意义上新颖的风格。这是否符合计算机在艺术上真正具有创造性的条件?乍一看,这在我看来相当于小说艺术家 a。
我认为围绕这个话题有很多有趣的想法。比如计算机的情感缺失有什么作用?这是创作某种艺术的障碍吗?在这篇文章中,我考虑了肖像和风景。这种特定类型的艺术对神经网络创造艺术的能力有多大影响?