TowardsDataScience 博客中文翻译 2020(三百三十五)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

又一个艾瑞斯·埃达

原文:https://towardsdatascience.com/eda-of-the-iris-dataset-190f6dfd946d?source=collection_archive---------15-----------------------

从超级流行的虹膜数据集中提取有用见解的尝试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由zdenk macha ek拍摄的照片

介绍

在这本笔记本中,我对著名的 Iris 数据集进行了探索性的数据分析,并试图从数据中获得有用的见解。

数据集中存在的要素有:

  • 萼片宽度
  • 萼片长度
  • 花瓣宽度
  • 花瓣长度

导入库

import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

sns.set_style('darkgrid')
matplotlib.rcParams['font.size'] = 14
matplotlib.rcParams['figure.figsize'] = (9, 5)
matplotlib.rcParams['figure.facecolor'] = '#00000000'

加载数据

iris_df = pd.read_csv("IRIS.csv")

理解数据

iris_df.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

iris_df.shape(150, 5)

从上面这条线我们可以看到,我们的数据集有 150 行和 5 列

iris_df.columnsIndex(['sepal_length', 'sepal_width', 'petal_length', 'petal_width',
       'species'],
      dtype='object')# Further inspecting the dataframe
def inspect_data(data):
    return pd.DataFrame({"Data Type":data.dtypes,"No of Levels":data.apply(lambda x: x.nunique(),axis=0), "Levels":data.apply(lambda x: str(x.unique()),axis=0)})
inspect_data(iris_df)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们获得更多关于数据集的信息

iris_df.info()<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   sepal_length  150 non-null    float64
 1   sepal_width   150 non-null    float64
 2   petal_length  150 non-null    float64
 3   petal_width   150 non-null    float64
 4   species       150 non-null    object 
dtypes: float64(4), object(1)
memory usage: 6.0+ KB

我们看到数据集的所有列都没有空值,其中四列是数字列,一列是分类列,这也是 dtypes 函数可以看到的。

iris_df.dtypessepal_length    float64
sepal_width     float64
petal_length    float64
petal_width     float64
species          object
dtype: object

统计见解

iris_df.describe(include='all')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

iris_df.describe() #Performing just for numeric columns

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

检查重复值

iris_df.duplicated().sum() # Total no of duplicates in the dataset3iris_df[iris_df.duplicated()] #This shows the actual duplicate rows

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的数据集中有 3 个重复项,但是删除它们可能会打破我们数据集的平衡,因为我们看到我们的数据集是平衡的,在 describe 函数中,对于 species 列,我们看到频率为 50,这可以通过下面的代码行进一步证明。

iris_df['species'].value_counts()Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
Name: species, dtype: int64

因此,我们可以让重复值保持原样并继续。

检查缺失值

我们通过 info 函数确认了我们的数据集没有空值,但是让我们进一步证明它。

iris_df.isnull().sum(axis=0)sepal_length    0
sepal_width     0
petal_length    0
petal_width     0
species         0
dtype: int64

估计偏度和峰度

iris_df.skew()sepal_length    0.314911
sepal_width     0.334053
petal_length   -0.274464
petal_width    -0.104997
dtype: float64iris_df.kurt()sepal_length   -0.552064
sepal_width     0.290781
petal_length   -1.401921
petal_width    -1.339754
dtype: float64

目标列上的可视化

我们的目标列是物种列,因为最终我们想要预测正确的花卉物种。

plt.title('Species Count')
sns.countplot(iris_df['species']);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这进一步表明,我们的数据集是平衡的,所有三个物种的记录相等。

可视化变量之间的关系

让我们比较萼片长度和萼片宽度列。

plt.title('Comparison between sepal width and length')
sns.scatterplot(iris_df['sepal_length'], iris_df['sepal_width']);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们再来比较一下,但这次我们也要在物种的基础上进行比较。

plt.figure(figsize=(16,9))
plt.title('Comparison between sepal width and length on the basis of species')
sns.scatterplot(iris_df['sepal_length'], iris_df['sepal_width'], hue = iris_df['species'], s= 50);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从上面的图像中,我们可以看出鸢尾属物种的萼片长度较小,但宽度较大。而我们看到云芝几乎位于长度和宽度的中间。而海滨锦鸡儿的萼片长度较长,宽度较小。

让我们比较花瓣长度和花瓣宽度列。

plt.title('Comparison between petal width and length')
sns.scatterplot(iris_df['petal_length'], iris_df['petal_width']);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到两个独立的集群,但不确定物种,所以让我们把物种也纳入方程。

plt.figure(figsize=(16,9))
plt.title('Comparison between petal width and length on the basis of species')
sns.scatterplot(iris_df['petal_length'], iris_df['petal_width'], hue = iris_df['species'], s= 50);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到 setosa 具有最小的花瓣长度和花瓣宽度,而 Versicolor 具有平均的花瓣长度和花瓣宽度,而 virginica 物种具有最高的花瓣长度和花瓣宽度。

现在让我们使用配对图来可视化所有列的关系。

sns.pairplot(iris_df,hue="species",height=3);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配对图代表我们的目标和变量之间的关系。我们可以看到,与其他物种相比,刚毛物种的特征有很大的差异,它具有较小的花瓣宽度和长度,而其萼片宽度高而其萼片长度低。类似的结论也可以从其他物种中得出,如花斑物种通常具有平均尺寸,无论是萼片还是瓣片。而海滨锦鸡儿具有高的花瓣宽度和长度,而它具有小的萼片宽度和大的萼片长度。

区分数字变量和分类变量

categorical_columns = iris_df.dtypes[iris_df.dtypes == 'object'].index
print('No of categorical fetures:',len(categorical_columns),'\n')
print(categorical_columns)
print('*'*100)

numerical_columns = iris_df.dtypes[iris_df.dtypes != 'object'].index
print('No of numerical fetures:',len(numerical_columns),'\n')
print(numerical_columns)No of categorical fetures: 1 

Index(['species'], dtype='object')
****************************************************************************************************
No of numerical fetures: 4 

Index(['sepal_length', 'sepal_width', 'petal_length', 'petal_width'], dtype='object')

这个函数进一步支持了我们之前的观察。

数字特征概述

iris_df[numerical_columns].describe()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,平均值和中值之间没有很大的差异,因此不需要进行数据转换。

变量之间的相关性

iris_df.corr()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,我们可以使用热图来可视化这种相关性。

fig = plt.figure(figsize = (15,9))
sns.heatmap(iris_df.corr(), cmap='Blues', annot = True);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从上面的热图中,我们看到花瓣长度和花瓣宽度有很高的相关性,花瓣宽度和萼片长度有很好的相关性,花瓣长度和萼片长度也有很好的相关性。

cols = ['sepal_width', 'sepal_length', 'petal_width', 'petal_length']
plt.figure(figsize=(20,4), dpi=100)
i = 1
for col in cols:
    plt.subplot(1,11,i)
    sns.distplot(iris_df[col])
    i = i+1
plt.tight_layout()
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以通过这个 distplot 观察我们的列的分布,它显示遵循正态分布。

直方图

让我们来看看数据集各列的数据分布。

fig, axes = plt.subplots(2, 2, figsize=(16,9))
axes[0,0].set_title("Distribution of Sepal Width")
axes[0,0].hist(iris_df['sepal_width'], bins=5);
axes[0,1].set_title("Distribution of Sepal Length")
axes[0,1].hist(iris_df['sepal_length'], bins=7);
axes[1,0].set_title("Distribution of Petal Width")
axes[1,0].hist(iris_df['petal_width'], bins=5);
axes[1,1].set_title("Distribution of Petal Length")
axes[1,1].hist(iris_df['petal_length'], bins=6);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 萼片宽度的最高频率在 3.0 至 3.5 之间,约为 70。
  • 萼片长度的最高频率在 5.5 和 6.0 之间,约为 35。
  • 花瓣宽度的最高频率在 0 到 0.5 之间,约为 50。
  • 花瓣长度的最高频率在 0 到 0.5 之间,约为 50。

我们的列的单变量分析

sns.FacetGrid(iris_df,hue="species",height=5).map(sns.distplot,"petal_width").add_legend();

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到刚毛藻很容易分离,而杂色和海滨锦鸡儿的一些部分是混合的。

sns.FacetGrid(iris_df,hue="species",height=5).map(sns.distplot,"petal_length").add_legend();

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们再次看到,在花瓣长度的基础上,setosa 是可分离的,而其他两个仍然重叠。

sns.FacetGrid(iris_df,hue="species",height=5).map(sns.distplot,"sepal_length").add_legend();

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到,仅仅根据萼片长度来区分物种是很困难的。

sns.FacetGrid(iris_df,hue="species",height=5).map(sns.distplot,"sepal_width").add_legend();

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

而在萼片宽度的情况下,物种的重叠更为强烈。

fig, axes = plt.subplots(2, 2, figsize=(16,9))
sns.boxplot(  y="petal_width", x= "species", data=iris_df,  orient='v' , ax=axes[0, 0])
sns.boxplot(  y="petal_length", x= "species", data=iris_df,  orient='v' , ax=axes[0, 1])
sns.boxplot(  y="sepal_length", x= "species", data=iris_df,  orient='v' , ax=axes[1, 0])
sns.boxplot(  y="sepal_length", x= "species", data=iris_df,  orient='v' , ax=axes[1, 1])
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 此外,我们可以看到,箱线图描述了 setosa 通常具有较小的特征,很少有异常值。
  • 杂色种具有一般的特征
  • 与其他种类相比,海滨锦鸡儿拥有最长的特征宽度和长度。

我们可以使用数据集上的小提琴图进一步查看分布

fig, axes = plt.subplots(2, 2, figsize=(16,9))
sns.violinplot(y="petal_width", x= "species", data=iris_df,  orient='v' , ax=axes[0, 0])
sns.violinplot(y="petal_length", x= "species", data=iris_df,  orient='v' , ax=axes[0, 1])
sns.violinplot(y="sepal_length", x= "species", data=iris_df,  orient='v' , ax=axes[1, 0])
sns.violinplot(y="sepal_length", x= "species", data=iris_df,  orient='v' , ax=axes[1, 1])
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据的核心密度以及数据的完整分布通过 violin 图显示。我们可以看到各种特征的概率密度。

结论

  • 数据集是平衡的,即所有三个物种都有相同的记录。
  • 我们有四个数字列,而只有一个分类列,这又是我们的目标列。
  • 花瓣宽度和花瓣长度之间存在很强的相关性。
  • 刚毛物种是最容易区分的,因为它的特征尺寸很小。
  • 杂色和海滨种通常是混合的,有时很难分开,而杂色通常具有平均特征尺寸,海滨种具有较大的特征尺寸。

使用 Panda 分析的 EDA

原文:https://towardsdatascience.com/eda-using-pandas-profiling-3291d6e856bb?source=collection_archive---------27-----------------------

用一行代码生成详细的数据分析报告

探索性数据分析是任何数据科学问题的关键方面。理解数据及其模式是建立模型的基础。做 EDA 有很多方法。为此,我最近偶然发现了一个神奇的熊猫图书馆,名为**“熊猫档案”**。

这个库的美妙之处在于,只需一次点击,您就可以获得整个数据集的非常全面的报告。它生成一个结构整齐的 HTML 文件,包含图表和汇总数据的组合。我在 Kaggle 数据集(宫颈癌风险分类)上使用了这个库,并将向您展示输出结果。使用下面的代码片段,我已经使用熊猫档案报告模块生成了一份详细的数据报告。

# import the pandas profile library
from pandas_profiling import ProfileReport

# load the data from Kaggle
train1=pd.read_csv("/kaggle/input/cervical-cancer-risk-classification/kag_risk_factors_cervical_cancer.csv")

# data cleaning
train2 = train1.replace('?', np.nan)

# creating profile report
report = ProfileReport(train2, title='Profile Report', html={'style':{'full_width':True}})

以下是输出的快照:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

概观

正如您从快照中看到的,您可以一次性获得所有重要的数据推断。这只是概述。点击变量选项卡,可以深入了解每个变量的特性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

变量

这里我们得到了数据及其分布的描述。该输出是针对数据中的每个变量分别给出的。接下来是相关性选项卡。为变量提供了五种类型的相关性。您可以分析每个相关性,以了解目标变量和因变量之间的关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相关

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一个选项卡用于缺失值。缺失值分析以五种不同的输出格式显示。计数条形图可快速查看每个变量缺失值的数量。还有矩阵、热图和树状图,为数据中所有缺失的值提供了一个很好的图形表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

缺少值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

热图

profile 报告中的最后一个选项卡提供了数据集的第一行和最后几行的样本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

样品

**总体而言,pandas 的剖析模块减少了数据探索的工作量,**因为所有关键的 EDA 结果都是剖析报告的一部分。基于该报告,可以执行进一步的数据探索。我在使用这个模块时发现的唯一缺点是,对于巨大的数据集,生成报告需要很长时间。我使用这个模块来了解变量之间的相关性,这给了我一个关于目标变量的可能强预测因子的想法。然后,我选择了最佳特征选择技术来理解哪些特征对目标变量贡献最大。您可以在下面的 Kaggle 笔记本中查看代码,

[## EDA -宫颈癌风险

使用 Kaggle 笔记本探索和运行机器学习代码|使用来自宫颈癌风险分类的数据

www.kaggle.com](https://www.kaggle.com/krrai77/eda-cervical-cancer-risk)

EDA:geo pandas、Matplotlib 和 Bokeh 中的可视化

原文:https://towardsdatascience.com/eda-visualization-in-geopandas-matplotlib-bokeh-9bf93e6469ec?source=collection_archive---------54-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 tdwi.org的詹姆斯·鲍威尔

如今,每个人都沉浸在来自新闻来源、手机、笔记本电脑、工作场所等等的大量数据中。数据传递来自不同数据变量的大量信息,如日期、字符串、数字和地理格式。如何从庞大的数据集里有效地抓住核心价值,并让用户容易解读?答案是探索性数据分析(EDA)。EDA 是一种可视化和分析数据的工具,可以从数据集中提取洞察力。观众能够从通过 EDA 过程总结的重要特征中更好地理解数据集。

在本文中,您将了解到:

(1)带有 Geopandas 和 Bokeh 的动态地理图

(2)对 2016 年至 2019 年全球数据集的分析

(Matplotlib 和 Bokeh 中的可视化

动态 choropleth 图

Choropleth 地图提供了地理区域(即国家)的各种模式和符号,很好地展示了跨区域的测量结果。为了绘制全球幸福地图,我们将关注全球幸福状况调查,该调查根据 155 个国家的幸福水平进行排名,在联合国 ***发布。***ka ggle 网站链接:世界幸福报告。情节的创建使用了 Python 库和包——Pandas、Geopandas 和 Bokeh。

下载世界地图文件

要渲染世界地图,需要有一个带有世界坐标的 shapefile。 Natural Earth 是下载地理空间数据的绝佳来源,其中充满了各种公共领域地图数据集。对于动态地理图的生成,1–110m 小比例尺数据是一个很好的地图数据集。

将 shp 文件转换为 Geopandas 数据帧

Geopandas 可以通过read_file函数将 ESRI shapefile 转换为 GeoDataframe 对象。使用返回地理数据框架对象的read_file命令,Geopandas 可以读取几乎任何基于矢量的空间数据格式,包括 ESRI shapefile。您可以在使用 geopands 函数读取数据集时指定列。

地理数据框架的代码片段

2015 年静态 choropleth 地图

首先,我们创建一个世界幸福报告的数据框架,并指定 2015 年。然后,可以将生成的数据框 df_2015 合并到地理数据框 gdf 中。为了以后使用散景创建可视化,我们需要 geojson 格式的数据作为绘图源。要素集合包含 GeoJSON 数据中的点、线和面。所以我们把数据帧转换成 JSON,转换成类字符串对象。

合并后的文件是一个 GeoDataframe 对象,可以使用 geopandas 模块进行渲染。然而,由于我们想加入数据可视化的交互性,我们将使用散景库。散景使用 GeoJSON 格式,用 JSON 表示地理要素。GeoJSON 将点、线和多边形(在散景中称为面片)描述为要素的集合。因此,我们将合并后的文件转换为 GeoJSON 格式。

Json 数据的代码片段

然后,我们准备用散景模块创建一个静态 choropleth 映射。我们首先用GeoJSONDataSource包读入 geojson 数据。接下来,我们将调色板指定为“YlGnBu ”,并颠倒颜色顺序以匹配最高幸福分数的最暗颜色。然后,我们为颜色条应用自定义刻度标签。对于颜色条,我们将颜色映射器、方向和标记标签映射到颜色条包中。

choropleth 映射的代码段

我们使用指定的地块高度和宽度创建图形对象。然后,我们用 x 和 y 坐标为图形添加补丁,并在 fill_colors 参数中指定字段和转换列。要在 Jupyter 笔记本中显示散景图,我们需要放入 output_notebook()模块,并让图形显示在 show()模块中。

choropleth 映射的代码段

分析:

从下图中,我们看到加拿大、墨西哥和澳大利亚等国家的幸福指数更高。对于南美和欧洲国家,总得分分布在指数 5 和 6 附近。相比之下,尼日尔、乍得、马里和贝宁等非洲国家的幸福指数要低得多。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:2015 年静态 choropleth 图

2015 年至 2019 年交互式 choropleth 地图

交互式 choropleth 地图增加了两个部分。一个是悬停工具的创建。我们为图表上显示的信息指定列。另一个是回调函数的创建。对于绘图交互,我们通过滑块指定年份来更新数据。我们将滑块值传递给回调函数,并调整数据。然后,我们将 slider 对象传递给 bokeh 列类中的 widgetbox 参数。最后,我们添加了curdoc类来创建交互式 web 应用程序,该应用程序可以将前端 UI 事件连接到真实的、正在运行的 Python 代码。

choropleth 映射的代码段

对于那些在 Jupyter 笔记本中运行 choropleth 地图出错的人来说,有一个在终端中运行脚本的替代方法。

bokeh serve --show EDA_Plot.py

互动 choropleth 地图视频

2015 年至 2019 年世界幸福报告的分析图

2016 年 GDP 与幸福指数散点图

散点图的代码片段

分析:

我们研究了 2016 年 GDP 增长和幸福水平得分的相关性。由于这些国家按地区进行了颜色编码,我们可以看到东南部国家的 GDP 增长较低,其次是潜在的幸福得分。大多数中欧和东欧国家的 GDP 增长率在 0.8 到 1.4 之间,幸福指数在 5 到 6 之间。对于西欧地区来说,它们往往显示出较高的经济增长幅度和幸福指数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:2016 年 GDP 与幸福指数散点图

经济指数排名前 10 位和后 10 位的国家(人均 GDP)

分析:

对于前 10 大经济趋势国家,“阿拉伯联合酋长国”显示出增长趋势,2015 年至 2018 年经济增长 0.68%。缅甸是唯一一个人均 GDP 增长率为 0.41 的亚洲国家。令人惊讶的是,像“马拉维”、“几内亚”、“坦桑尼亚”这样的撒哈拉以南非洲国家是经济呈上升趋势的前 5 名国家。

我们可以看到,经济趋势下降的国家大多在非洲。从 2015 年到 2018 年,像’利比亚’,‘也门’,‘科威特’,‘约旦’,'塞拉利昂’这样的倒数 5 个国家的经济指数较低。其中四个国家位于中东和北非。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图表 3:经济指数最高和最低的 10 个国家

阿联酋年度 GDP 变化

分析:

看到经济指数(人均 GDP 增长)排名前 10 位和后 10 位的国家,我们密切关注阿拉伯联合酋长国的经济趋势。1980 年,阿联酋出现了 40 年来最大的 GDP 增长值。然而,在 1982 年至 1986 年期间,增长率变成了负数。在未来 10 年,阿联酋的国内生产总值表现出相当稳定的增长,约为 0.1-0.2 个百分点。2009 年,受金融危机的影响,国内生产总值大幅下滑。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:阿联酋年度 GDP 变化

总之:

  • 要创建 choropleth 地图,geopands 可以将 shp 文件转换为数据框对象。对于可视化的创建,散景与 geopandas 包配合得很好。但是,最好记住,在合并两个数据集时,需要将发货文件中的国家/地区与外包数据进行匹配。
  • Matplotlib 和 Bokeh 是 Python 中可视化工具的两个很好的包。散点图更好地显示了两个变量与数值的相关性。就发散图而言,它更好地显示了数据集的下降和上升趋势。对于 DateTime 格式变量,最好在绘图创建时注意缺少值的 date。线形图显示了时间序列数据的明显趋势。

边缘人工智能

原文:https://towardsdatascience.com/edge-ai-cc478f9fbb5a?source=collection_archive---------17-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

亚历山大·戈德罗在 Unsplash 上拍摄的照片

Edge AI 到底是什么意思?这个问题我被问了好几次,我决定分享一下我对这个话题的想法。边缘人工智能通常指在设备上本地运行人工智能算法所需的组件,也称为设备上人工智能。最近,这意味着在设备上运行深度学习算法,大多数文章倾向于只关注一个组件,即推理。这篇文章将揭示这个难题的其他部分。

实验装置

边缘设备在成本/性能方面差异很大,为了使讨论更加具体,下面是本系列中使用的实验设置:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

高通骁龙 855 开发套件[ 4

  • 高通骁龙 855 开发套件。
  • 对象检测作为要在边缘设备上运行的深度学习模型。有很多很好的文章描述了物体检测的最新技术[调查论文]。在本系列中,我们将使用 Mobilenet SSD 模型进行对象检测。
  • Tensorflowjs 在 nodejs 环境中快速运行对象检测模型

为什么要在 Edge 上运行人工智能算法

为什么不能依靠云端运行 AI 算法?毕竟,在云上扩展资源以运行人工智能/深度学习模型来满足您的性能需求更容易。那么,为什么要担心在计算和功耗受限的边缘设备上运行它们呢?为了回答这个问题,让我们考虑两种情况:

a)基于云的架构,其中推理发生在云上。

b)基于边缘的架构,其中推断在设备上本地发生。

(为了尽可能公平地进行比较,在这两种情况下,都将使用 nodejs 服务器以及【tensorflowjs】【仅 cpu】,唯一的区别在于,在 情况 a) 中,web 服务器将在 EC2 实例上运行,而在 情况 b) 中,web 服务器将在边缘设备上本地运行【T19 这里的目标不是拥有一个平台(云或边缘)的优化实现,而是拥有一个框架来进行公平的比较。)**

基于云的架构

这是基于云的设置的样子,它将包括下面详细描述的步骤:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用于推理的纯云架构。(结尾的图像参考)。

步骤 1:请求输入图像

这里有两种可能的选择:

  • 我们可以从边缘设备发送从相机捕获的原始图像(RGB 或 YUV)。原始图像总是更大,发送到云需要更长时间。
  • 我们可以在发送之前将原始图像编码为 JPEG/PNG 或其他一些有损格式,在运行推理之前在云上将它们解码回原始图像。这种方法将涉及解码压缩图像的额外步骤,因为大多数深度学习模型都是用原始图像训练的。在本系列的后续文章中,我们将涉及更多关于不同 raw 图像格式的内容。

为了使设置简单,使用第一种方法[RGB 图像]。HTTP 也被用作向 REST 端点发送图像的通信协议(http:// : /detect)。

步骤 2:在云上运行推理

  • tensorflowjs 用于在 EC2 (t2.micro)实例上运行推理,仅使用单个 nodejs 工作实例(无负载平衡、无故障转移等)。
  • 使用的 Mobilenet 版本在这里托管
  • Apache Bench(ab)用于收集 HTTP 请求的延迟数。为了使用 ab ,RGB 图像被 base64 编码并发布到端点。 express-fileupload 用于处理发布后的图像。

总延迟(RGB) = Http 请求+推理时间+ Http 响应

**ab -k -c 1 -n 250 -g out_aws.tsv -p post_data.txt -T "multipart/form-data; boundary=1234567890"** [**http://<ip-address>:<port>/detect**](http://10.221.1.231/detect)This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, [http://www.zeustech.net/](http://www.zeustech.net/)
Licensed to The Apache Software Foundation, [http://www.apache.org/](http://www.apache.org/)Benchmarking <ip-address> (be patient)
Completed 100 requests
Completed 200 requests
Finished 250 requestsServer Software:
Server Hostname:        <ip-address>
Server Port:            <port>Document Path:          /detect
Document Length:        22610 bytesConcurrency Level:      1
Time taken for tests:   170.875 seconds
Complete requests:      250
Failed requests:        0
Keep-Alive requests:    250
Total transferred:      5705000 bytes
Total body sent:        50267500
HTML transferred:       5652500 bytes
Requests per second:    1.46 [#/sec] (mean)
Time per request:       683.499 [ms] (mean)
Time per request:       683.499 [ms] (mean, across all concurrent requests)
Transfer rate:          32.60 [Kbytes/sec] received
                        287.28 kb/s sent
                        319.89 kb/s totalConnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   5.0      0      79
Processing:   530  683 258.2    606    2751
Waiting:      437  513 212.9    448    2512
Total:        530  683 260.7    606    2771Percentage of the requests served within a certain time (ms)
  50%    606
  66%    614
  75%    638
  80%    678
  90%    812
 **95%   1084**
  98%   1625
  99%   1720
 100%   2771 (longest request)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于云的架构的端到端推理延迟直方图(桶大小为 1s)。它显示了 Apache Bench (ab)在给定时间内生成的请求的推理延迟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于云的体系结构的端到端推理延迟按响应时间(毫秒)排序。这篇文章解释了这两个情节的区别。

正如我们在这里看到的,95%的请求延迟大约为1084 毫秒

基于边缘的架构

Web 服务器(运行 tensorflowjs)在本地边缘设备上运行(高通骁龙 855 开发套件[ 4 ])。我们使用 Apache Bench 重复相同的步骤(这次是对本地主机而不是远程服务器的 http 请求),结果如下。

**ab -k -c 1 -n 250 -g out_device.tsv -p post_data.txt -T "multipart/form-data; boundary=1234567890"** [**http://localhost:3000/detect**](http://10.221.1.231/detect)This is ApacheBench, Version 2.3 <$Revision: 1843412 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, [http://www.zeustech.net/](http://www.zeustech.net/)
Licensed to The Apache Software Foundation, [http://www.apache.org/](http://www.apache.org/)Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Finished 250 requestsServer Software:        
Server Hostname:        localhost
Server Port:            3000Document Path:          /detect
Document Length:        22610 bytesConcurrency Level:      1
Time taken for tests:   80.689 seconds
Complete requests:      250
Failed requests:        0
Keep-Alive requests:    250
Total transferred:      5705000 bytes
Total body sent:        50267750
HTML transferred:       5652500 bytes
Requests per second:    3.10 [#/sec] (mean)
Time per request:       322.755 [ms] (mean)
Time per request:       322.755 [ms] (mean, across all concurrent requests)
Transfer rate:          69.05 [Kbytes/sec] received
                        608.38 kb/s sent
                        677.43 kb/s totalConnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       2
Processing:   290  323  36.0    317     737
Waiting:      290  322  36.0    316     736
Total:        290  323  36.1    317     739Percentage of the requests served within a certain time (ms)
  50%    317
  66%    323
  75%    328
  80%    331
  90%    341
 ** 95%    357**
  98%    397
  99%    473
 100%    739 (longest request)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于边缘的架构的端到端推理延迟直方图(桶大小为 1s)。它显示了 Apache Bench (ab)在给定时间内生成的请求的推理延迟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于边缘的体系结构的端到端推理延迟按响应时间(毫秒)排序。这篇文章解释了这两块地的区别。

正如我们在这里看到的,95%的请求延迟大约为357 毫秒

优化机会

正如您所看到的,延迟数字相当高,我们在这里获得的数字更像是上限延迟,有许多优化机会,其中一些详述如下:

基于云的架构:

  • 拥有多个 nodejs worker 实例,并在它们之间实现负载平衡。
  • 有多个部署(美国东部、美国西部等)并将请求发送到最近的部署。
  • 批量处理多个输入图像,并在云上运行批量推理。
  • 拥有一个基于 gpu 的 EC2 实例并使用 tensorflow-node-gpu 来加速推理
  • 使用不同的通信协议,如 MQTT 更适合 IOT /云连接,以避免 HTTP 的开销。

基于边缘的架构:

  • 针对您的边缘设备进行优化实施。在这种情况下,对于高通骁龙 855 开发套件[ 4 ]推理将在 GPU / DSP 或其 NPU 上加速。
  • 最有可能的是,在设备上的实现将通过供应商框架依赖于本地库,如 SNPEtensorflow-lite
  • 优化数据路径,包括从相机捕捉图像到输入深度学习模型以运行推理。

结论

我们详细研究了决定您是否需要基于边缘的解决方案的一个因素,因为我们发现如果您的应用能够容忍云延迟,那么基于云的推理将是最快的方式。但是,如果您的应用对延迟敏感,那么您可以考虑基于边缘的解决方案。请确保对您的特定用例进行基准测试,从中选择一个。除了延迟之外,考虑基于边缘的解决方案还有其他一些原因:

  • 您已经部署了边缘设备,并希望利用它来节省云计算成本。
  • 隐私,你不希望数据离开边缘设备。
  • 与云没有完全连接或连接性差的设备,基于边缘的解决方案成为必然

参考

[1]https://storage . Google APIs . com/open images/web/visualizer/index . html?set = train&type = detection&c = % 2Fm % 2f 0k 4j&id = 101 C3 faac 77 e 2e 29—来自开放图像数据集 V5 的汽车覆盖图像

[2]https://C2 . static Flickr . com/7/6021/6005573548 _ 11 b 7 b 17 c 9 b _ o . jpg—原车图片

[3]https://pix abay . com/illustrations/Google-Pixel-3-Google-cell-Phone-3738925/—Pixel 手机图片。

[4]https://www . Intrinsyc . com/snapdragon-embedded-Development-kits/snapdragon-855-hdk/—Intrinsyc 开发套件

[5]http://www . bradlanders . com/2013/04/15/Apache-bench-and-gnuplot-you-possible-do-it-wrong/

边缘计算 101

原文:https://towardsdatascience.com/edge-computation-101-2c1823656940?source=collection_archive---------33-----------------------

了解边缘计算的基本知识。

在本文中,我们将讨论

  • 什么是边缘计算?
  • 边缘计算、雾计算和云计算的区别
  • 边缘计算有什么好处?
  • 边缘计算用在哪里?
  • 实施边缘计算的不同硬件选项

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

莱尼·屈尼在 Unsplash 上的照片

根据思科的估计,到 2021 年,每年将有近 850 Zettabytes (ZB)的数据在云外产生,物联网设备将占这些数据的很大一部分。

为了有效地使用物联网设备生成的数据,数据应该在设备之间无缝通信,以进行实时计算和推理,从而提高数据安全性并减少延迟。

边缘计算、雾计算和云计算解决了性能、安全性和成本效益方面的许多挑战。根据组织的数据计算、分析和存储需求,设计边缘计算、雾计算和云计算的平衡组合。

但是什么是边缘计算?

边缘计算直接在连接到产生数据的传感器或致动器的设备上进行。

边缘计算、雾计算、云计算有什么区别?

Edge、Fog 和云计算之间的区别基于数据生成、处理、访问和智能应用的位置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

边缘计算

  • 数据处理在生成数据的同一设备上完成。
  • 由于数据是在生成数据的同一台设备上处理的,因此网络连接问题将会减少,从而降低延迟。
  • 数据是安全的,因为它不会传输到其他设备或网络进行处理。

雾计算

  • 与边缘计算类似,数据处理更接近于使用局域网生成数据的设备
  • 与在设备上进行数据处理的边缘计算不同,在雾计算中,数据通过局域网在设备和网关之间传输。
  • 与远程存储和处理数据的云计算不同,在雾计算中,使用局域网在本地存储和处理信息。
  • 由于雾计算中的数据是在本地存储和处理的,因此可以离线访问,与云相比延迟更短,并降低了数据安全风险。
  • 在本地的一个中心位置处理来自不同设备或来源的数据。

云计算

  • 由服务器、网络、存储、计算能力和通过互联网实现的应用程序开发组成的计算模型。
  • 数据是通过互联网存储、访问和处理的。
  • 随时随地访问云服务。
  • 能够根据需求扩大和缩小资源规模
  • 您只需根据云资源的使用情况付费。

为什么要用边缘计算?

边缘计算的优势

边计算有几个好处

  • **减少延迟:**由于计算发生在生成数据的位置,并且没有通过网络传输数据,因此减少了延迟,从而提供了更好的推理时间。
  • **安全:**所有的数据处理和推理都在边缘执行,因此没有数据离开设备或通过网络传输,因此不存在数据隐私和安全问题。
  • 可扩展性:随着边缘计算的增加,让边缘计算数据中心与设备共处一地,可以让组织以更快的速度扩展边缘计算需求,并且仍然非常经济高效。

边缘计算用在哪里?

需要减少延迟来处理数据时,使用边缘计算。如果您需要快速数据处理,那么应该在尽可能靠近数据生成源的地方执行,以避免由于数据传输而导致的任何延迟。

自动驾驶汽车、物联网、语音助手、机器或服务的预测性维护、交通管理等。实现边缘计算。

例如,语音助手接受您的语音命令,使用深度 NLP 应用自动语音识别将语音转换为文本,并应用语言上下文,搜索 web 并交付结果。所有这些都发生在边缘。

你有哪些边缘计算的选择?

边计算的选项

基于技术架构,Edge AI 硬件分为三类。

  • 图形处理单元(GPU) :兼容性和性能都很好但是像 NVDIA 的 Jetson 板一样耗能更多。需要软件编程技能。
  • 现场可编程门阵列(FPGA) :高能效,因为它们需要更少的计算资源,但需要软件编程技能和一些硬件定义专业知识。FPGA 的一个例子是英特尔 FPGA 加速服务器
  • 专用集成电路(ASIC)-ASIC 的一个例子是谷歌的 TPU 设备,如 USB 加速器或 Coral Dev 板,具有良好的性能和高效的功耗。

那么如何决定你应该使用什么类型的计算呢?

边缘计算:如果你在寻找更快的数据处理、更高的推理时间、更高的数据安全性、更低的带宽甚至没有互联网连接,那么边缘计算是最好的选择。

云计算:如果你在寻找随时随地的数据处理需求。您的数据处理和存储需求在不同的时间是不同的,并且喜欢扩大和缩小数据处理资源;那样的话,云更适合你的需求。

**雾计算:**如果您有很多边缘设备,需要集中处理数据,数据安全性合理,但仍有很高的推理时间。此外,当互联网连接不太稳定或带宽较低时,雾计算可以满足您的需求。

结论

根据您的数据处理或推理需求、网络连接和数据安全要求,您可以选择一种或多种计算需求。

Python 中的边缘检测

原文:https://towardsdatascience.com/edge-detection-in-python-a3c263a13e03?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上个季度,我在大学里帮助教授 Python 课程,结果学到了很多关于图像处理的知识。我想在本文中继续分享这些知识,因为我们讨论了使用 Python 进行边缘检测的理论和执行

为什么要检测边缘?

我们真正应该问的第一个问题是*“为什么要麻烦边缘检测?”*。除了很酷之外,为什么它是一种有用的技术?为了激发这一点,考虑下面的纸风车图像及其“仅边缘”对应物:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

风车(左)及其边缘(右)的图像

我们可以看到左边的原始图像有各种颜色和阴影,而右边的“仅边缘”表示是黑白的。如果问哪个图像需要更多的数据存储,我打赌你会说原始图像。这是有意义的。通过检测图像的边缘,我们去掉了很多细节,从而使图像“更轻”。

因此,在我们不需要保持图像的所有复杂细节,而是 只关心整体形状 的情况下,边缘检测会非常有用。

如何执行边缘检测—数学

在讨论代码之前,让我们快速看一下边缘检测背后的数学原理。作为人类,我们非常擅长识别图像的“边缘”,但我们如何教会计算机做同样的事情呢?

首先,考虑一个在白色背景中有一个黑色正方形的非常无聊的图像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的工作形象

在这个例子中,我们认为每个像素的值在 **0(黑色)**和 **1(白色)**之间,因此现在只处理黑白图像。完全相同的理论将适用于彩色图像。

现在,假设我们正在尝试确定绿色高亮像素是否是该图像边缘的一部分。作为人类,我们会说是的,但是我们如何使用相邻像素来帮助计算机得出相同的结论呢?

让我们取一个小的 3×3 的局部像素框,以所讨论的绿色像素为中心。这个框显示为红色。然后,让我们对这个小盒子“应用”一个过滤器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将垂直滤镜应用于局部像素框

我们将“应用”的过滤器如上所示,乍一看很神秘,但是让我们看看它是如何工作的。现在,当我们说 “将过滤器应用于像素的小局部框” 时,我们的意思是将红色局部框中的每个像素乘以过滤器元素中的每个像素。因此,红框中的左上角像素为 1,而滤镜中的左上角像素为-1,所以将这些像素相乘得到-1,这就是我们在结果的左上角像素中看到的。结果中的每个像素都是以完全相同的方式实现的。

下一步是对结果中的像素求和,得到-4。注意-4 实际上是我们通过应用这个滤镜可以得到的最小值(因为原始图像中的像素只能在 0 到 1 之间)。因此,我们知道所讨论的像素是顶部垂直边缘的的一部分,因为我们获得了最小值-4。

为了掌握这种变换,让我们看看如果我们对正方形底部的像素应用滤镜会发生什么:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到我们得到了一个类似的结果,除了结果中的值之和是 4,这是我们通过应用这个过滤器可以得到的最高值。因此,我们知道我们在图像的底部垂直边缘找到了一个像素,因为我们得到了最大值 4。

要将这些值映射回 0–1 范围,我们只需将 4 相加,然后除以 8,将-4 映射到 0 ( 黑色),将 4 映射到 1 ( 白色)。因此,使用这种称为垂直索贝尔滤波器的滤波器,我们能够非常简单地检测图像中的垂直边缘。

水平边缘呢?我们简单地采用垂直滤波器的转置(关于它的对角线翻转),并将这个新的滤波器应用于图像以检测水平边缘。

现在,如果我们想要检测水平边缘、垂直边缘和介于两者之间的边缘,我们可以组合垂直和水平分数,如下面的代码所示。

希望理论清楚!现在让我们通过查看代码来结束。

如何执行边缘检测—代码

首先是一些设置:

  • 把“pinwheel.jpg”替换成你想找到边缘的任何有趣的图片!确保它在同一个工作目录中。

以及边缘检测码本身:

需要注意一些事情:

  • 图像周围将会有一个小边界,因为我们无法在边界像素上完全创建本地 3 x 3 框。
  • 由于我们在水平和垂直边缘上都进行检测,所以我们只是将原始分数除以 4(而不是加上 4 然后除以 8)。这不是一个重大的变化,但它将更好地突出我们的形象的优势。
  • 组合水平和垂直分数可能会导致最终边缘分数超出 0–1 范围,因此我们通过重新归一化分数来结束。

在更复杂的图像上运行上面的代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

边缘检测的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

仅此而已!希望你学到了什么,敬请关注更多数据科学文章~

OpenCV 的边缘和轮廓基础知识

原文:https://towardsdatascience.com/edges-and-contours-basics-with-opencv-66d3263fd6d1?source=collection_archive---------8-----------------------

如何使用 Python 和 OpenCV 从图像中提取轮廓

我一直在尝试用 OpenCV 学习计算机视觉,在这篇文章中,我将探索边缘检测和轮廓。

上次我讲了内核和卷积的基础知识。这些方法被广泛用于不同的目的;其中一个引起了我的注意,我觉得这应该是学习计算机视觉的一个极好的下一步。

边缘检测和轮廓用于定位图像中颜色或亮度有很大变化的点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原图由 Stefano 提供。

对我们来说,这看起来很简单直观,但对计算机来说,这可能会很棘手。

谨慎的

Canny 边缘检测是一种用于从图像中提取边缘的算法,由于它看起来非常简单,我相信我们可以从它开始。

该算法有四个阶段:

  • 第一个 —用高斯模糊进行降噪;
  • 第二个 —用 Sobel 核得到梯度方向和大小;
  • 第三 —应用非最大抑制,去除不属于轮廓的多余像素;
  • 第四个 —应用使用最小值和最大值的滞后阈值,通过强度梯度过滤轮廓。

尽管看起来不那么容易,但是用 OpenCV 实现 Canny 检测还是很舒服的。

我们从导入库开始。

import cv2
import numpy as np
import matplotlib.pyplot as plt

现在我们可以看看我们想要提取轮廓的图像。

image = cv2.imread('Images/12.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)fig, ax = plt.subplots(1, figsize=(12,8))
plt.imshow(image)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

插图由 Stefano 绘制。

要使用 Canny,我们需要将图像转换为灰度,然后使用方法。小心处理图像,以及最小和最大阈值。

我建议您尝试这些阈值,看看结果如何变化。

g = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
edge = cv2.Canny(g, 60, 180)fig, ax = plt.subplots(1, figsize=(12,8))
plt.imshow(edge, cmap='Greys')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

轮廓。

很好,我们现在可以使用。寻找轮廓和。绘制轮廓,获取并绘制用 Canny 检测发现的外部轮廓。

contours = cv2.findContours(edge, 
                            cv2.RETR_EXTERNAL,
                            cv2.CHAIN_APPROX_NONE)cv2.drawContours(image, contours[0], -1, (0,0,255), thickness = 2)fig, ax = plt.subplots(1, figsize=(12,8))
plt.imshow(image)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像上的轮廓。

酷,轮廓变量是一个包含所有 Canny 检测到的轮廓的列表——这意味着我们可以像这样访问和操作它们。

我们可以对这个列表进行排序,并传递 OpenCV 函数。countourArea 作为关键字,它将根据大小对所有检测到的轮廓进行排序。

让我们试着只画最大的等高线。

image = cv2.imread('Images/12.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)contours, h = cv2.findContours(edge, 
                               cv2.RETR_EXTERNAL,
                               cv2.CHAIN_APPROX_NONE)contours = sorted(contours, key=cv2.contourArea, reverse=True)cv2.drawContours(image, contours[0], -1, (0,0,255), thickness = 5)fig, ax = plt.subplots(1, figsize=(12,8))
plt.imshow(image)

*请注意,我重新加载了原始图像,因为我们绘制了最后一个图像。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

面积最大的等高线。

有意思,我想我期待的是别的东西,比如整个嘴唇,甚至是舌头。相反,最突出的轮廓是嘴的一部分,不知何故与牙齿相连。

我想这向我们表明,这些方法要么需要以前的操作,要么需要更直观的图像来达到预期的结果。以现在的方式,我们的轮廓在正确的位置,但它们太颗粒化,无法恢复一个完整的形状。

尽管如此,该方法允许我们选择我们正在寻找的特定轮廓,甚至过滤一些范围的值。

还有其他寻找轮廓的方法;例如,简单的二值化也可以完成这项工作。

image = cv2.imread('Images/12.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
r, t = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV)contours, h = cv2.findContours(t, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
contours = sorted(contours, key=cv2.contourArea, reverse=True)cv2.drawContours(image, contours, -1, (0,0,255), thickness = 5)fig, ax = plt.subplots(1, figsize=(12,8))
plt.imshow(image)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有阈值和二值化的轮廓。

同样,您可以尝试更改阈值,看看会发生什么。

凸包

轮廓的典型应用是检测图像中的几何形状,这对于简化涉及分类或对象检测的问题非常有用。

问题是,根据质量、角度、噪声和许多其他因素,轮廓很少是简单的多边形。这就是凸包出现的原因。这里的想法是简化由我们以前的边缘检测方法生成的多边形。

看看维基百科对凸包的定义:

在几何学中,一个形状的凸包或凸包络或凸闭包是包含它的最小凸集。

相当复杂,但是 OpenCV 用函数. convexHull 简化了这一步。

image = cv2.imread('Images/14.jpg')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)g = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
edge = cv2.Canny(g, 140, 210)contours, hierarchy = cv2.findContours(edge, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)for c in contours:
    hull = cv2.convexHull(c)
    cv2.drawContours(image, [hull], 0, (0, 255, 0), 2)fig, ax = plt.subplots(1, figsize=(12,8))
plt.imshow(image)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

漫游者创作的插图

很好,我们可以看到轮廓并不完全符合图纸,而是简化了水滴的形状。

我认为这是一个良好的开端,边缘检测,轮廓,以及不同的操作和步骤,我们可以添加到这个过程中。我鼓励你尝试边缘检测的参数、阈值和不同方法。

感谢阅读我的文章。我希望你喜欢它。

往期文章 :
核与卷积基础知识
变换基础知识
OpenCV 入门

资源: OpenCV Canny
OpenCV 特征检测
OpenCV 凸包
求简单多边形的凸包——罗纳德·l·格雷厄姆
OpenCV 结构分析和形状描述

学历还是经历?都是。

原文:https://towardsdatascience.com/education-or-experience-both-a2466856e12d?source=collection_archive---------54-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是的,你够好了,但是你必须努力。你好,我是尼克🎞 on Unsplash

一个老数学家的思考能教给一个数据科学家什么?

自从数据科学诞生以来,一直有一些争论没有得到解决。如果您关注社区中的讨论,您可能已经看到了许多关于以下问题的文章和帖子。

需要正规教育还是实际操作经验?

你应该专注于理论还是实践?

专攻一个领域还是努力成为通才?

你可能找到的答案通常位于光谱的极端部分。(尤其是当对话发生在 Twitter 上时,由于其受限的格式,完全不适合表达复杂的论点。)双方都有强有力的论据。

一方面,正规教育并不意味着深入的知识,尤其是在不属于标准课程的专业领域。作为一名数据科学家,需要一个学位可能意味着守门,这拒绝了许多有才华的人的进入。

另一方面,不了解事物如何工作的实践经验只是用户级别的知识。如果你会开车,并不意味着你能在发动机开始冒烟的时候修好它。在数据科学行业,我们都努力成为竞争环境中的竞赛机制。

同样的问题用不同的方式表述就是理论与实践的争论。对一些人来说,机器学习等同于证明定理。对其他人来说,它是在 Kubernetes 上清理数据或服务模型。哪一边是对的?

两者皆有。

数学如何面对同样的问题

科学史呈螺旋式上升。通常,我们会问几代人以前已经回答过的问题。由于时代精神,不同的背景促使我们重新评估问题,尽管许多旧的论点仍然存在。

数学家在 20 世纪也经历过类似的困境。在此期间,应用研究开始蓬勃发展。

纯数学是由它自身激发的,这在科学领域中是不常见的。问题赋予新理论生命,新理论又引发新问题,如此循环往复。群论基本上是由 variste Galois 创立的,目的是为了表明对于次数大于 4 的多项式,没有明确的求根公式。反过来,幺半群理论是出于对数学的好奇而形成的,以看看如果我们不假设每个元素的可逆性会发生什么。

这并不意味着幺半群理论没有用。相反,它在各个领域都得到了卓有成效的应用,尤其是在计算机科学领域。然而,这是由应用程序驱动的吗?没有。

然而,新一代的数学家经常挑战这一观点,因此出现了分歧。

理论还是应用?

雷尼的数学艺术

匈牙利数学研究的创始人之一阿尔夫雷德·雷尼给出了最精彩的答案。如果你对概率论感兴趣,你可能遇到过雷尼熵的概念,它是众所周知的香农熵的推广。

(如果这不熟悉,你可能见过这句话或它的一个变体:“数学家是把咖啡变成定理的装置。”这出自雷尼,尽管它被认为是保罗·erdős.的作品)

雷尼想,如果诗人有诗歌艺术,为什么数学家不能有数学艺术呢?

在他的著作中(不幸的是只有匈牙利语版本),他概述了数学家面临的几个关键困境。

学习还是研究?

知识面广还是知识面深?

自我批评还是自信?

个人工作还是团队合作?

理论还是应用?

数学精度还是直觉?

开辟新的研究领域还是在现有领域中寻找尚未解决的问题?

努力工作还是幸运的想法?

这些问题与今天的数据科学家、工程师和机器学习研究人员相关。雷尼的简答?

在所有的困境中,用“和”代替“或”。这是 Ars Mathematica。”阿尔弗雷·德·雷尼

让我们在数据科学的背景下解开这些单词。

理论与实践

为了建立一个共同点,让我们同意“教育与经验”实际上是一个“理论与实践”的困境。如果学位代表知识以外的任何东西,比如说社会地位,那么它就是守门人,因此是完全错误的。这里没有争论。所以我会把正规教育等同于理论知识,把工作经验等同于实践专长。

所以,回到数据科学。不要争论理论和实践孰先孰后,我们应该认识到两者都很重要,但不是两者都是进入这个领域的必要条件。

通往数据科学的道路有很多,其中也有很多。每一种都有它的长处和短处,但总的来说,它们很好地互补了。缺乏理论知识是完全没有问题的,因为不是所有的工作都需要你从头开始实现一个神经网络。(其实很少有人会。)

类似的论点也适用于那些来自更理论化背景的人。

像“数据科学需要多少数学?”是无效的。数据科学是巨大的。你想要哪一部分?有些部分根本不需要数学,而有些部分却充满了数学。然而,根据你的职业道路,你可能会需要了解数学。在这种情况下,计算机科学/数学学位是有用的,但如果你愿意花时间像学生一样学习,你也可以做到。

底线是,你最终将需要理论和实践,但是从一个方向开始是非常好的。

如果你喜欢把机器学习概念拆开,理解是什么让它们运转,我们有很多共同点。看看我的博客,我经常在那里发表这样的技术文章!

减少对妇女暴力的教育。

原文:https://towardsdatascience.com/education-to-diminish-violence-against-women-bf599b350426?source=collection_archive---------56-----------------------

非洲家庭暴力信息图。

“对妇女和女孩的暴力行为(VAWG)是当今世界上最普遍、最持久和最具破坏性的侵犯人权行为之一,由于有罪不罚、沉默、耻辱和耻辱,这种行为在很大程度上仍未被报道。”

背景

在我提交的#改头换面星期一的文章中,我通过使用 Tableau 将补充图表绘制成故事点,改进了一个名为“消除对妇女暴力国际日”的 Viz。

不幸的是,Medium 不允许来自 Tableau 的交互式 Viz 块或代码嵌入,因此对于本演练,将使用静态屏幕截图来传达相关和重要的信息。

这是最初的,即。请随意在幻灯片/故事点上悬停,因为它们是交互式的!

数据源

人口和健康调查(DHS)是具有全国代表性的家庭调查,为人口、健康和营养领域的广泛监测和影响评价指标提供数据。

DHS 在非洲国家进行了一项关于妇女和男子如何为暴力侵害妇女行为辩护的调查。然后,数据集被分类为国家、参与者的人口统计数据、问题类型和同意率(认为在某些情况下暴力侵害妇女和女孩是合理的人的百分比)。

数据集特征的定义如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据集的 Excel 文件或 Web 数据连接器 URL 可以从 data.world 获得。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态故事点 1

应对非洲普遍存在的暴力侵害妇女行为

联合国对暴力侵害妇女行为的定义是"对妇女造成或可能造成身体、性或心理伤害或痛苦的任何基于性别的暴力行为,包括威胁实施这种行为、胁迫或任意剥夺自由,无论发生在公共生活还是私人生活中"。

从历史上看,非洲家庭明显重男轻女;非洲社会认为儿子是他们家庭的荣誉,而只有女儿的家庭会被打上烙印。儿子通常断奶较晚,吃得更好,更有可能入学。这些社会规范使女孩成长为低自我价值和低自尊的妇女,从而使永无休止的暴力循环永久化。因此他们认为在某些情况下殴打妇女是正当的。虽然这种错误的心态将很快被废黜。

联合国妇女署开展了一系列实质性和有效的区域努力,以扩大在非洲的外联范围,结束基于性别的暴力,并动员问责要求。民间社会团体为当地记者组织了关于性别暴力的讲习班;私营公司对性别歧视和性骚扰实行“零容忍”政策;中小学和大学已将提高认识活动纳入其课程。

在这项研究中,我们将深入探讨为什么我们会得出教育是消除暴力侵害妇女行为的关键促进因素这一结论,探究被调查妇女的哪些类型的行为会煽动男子做出身体上的冷酷行为,以及使用平均协议率作为 KPI,根据对妇女的家庭暴力对非洲国家进行排名。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按平均协议价值排名,厄立特里亚居首位,其次是阿富汗。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了了解被调查女性导致她们受到男性同事身体虐待的行为,绘制了一个水平条形图——针对女性和男性平均认同值的调查问题。

女性和男性的平均一致值分别用紫色和银灰色进行颜色编码。

最站不住脚的虐待理由是当女人烧糊食物时。在另一个极端,参与者的男女都认为忽视他们的孩子为殴打提供了强有力的理由。

**总体而言,与男性相比,更多的女性认为针对她们的暴力是正当的。**这一事实有效地描述了这些国家的社会标准——对妇女的歧视以及在她们中间播下低自我价值和低自尊的种子——是如何使这种暴力循环永久化的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态故事点 4

深入研究参与调查的妇女的人口统计数据,可以发现,就教育背景而言,大多数受过高等教育的妇女似乎认为殴打的情况是不合理的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态故事点 5

高等教育似乎是根除对妇女和女童的不公正暴力的最大潜在因素。所有国家的平均同意率仅为 9.5%!显然,随着妇女的教育水平从高等教育倒退到未受教育,平均认同率大幅上升。如气泡图右侧所示,与教育水平较低的国家相比,多米尼加共和国的平均认同率仅为 0.3%。

就居住地而言,农村地区的妇女比城市人口更有可能认为暴力侵害她们是正当的。

尽管百分比差异不明显,但年轻妇女和女孩往往认为对她们的虐待是合理的。可以对这一年龄组进行进一步的研究。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

利用从上述信息图表的解释性分析中获得的洞察力,妇女赋权计划可以有效地分配资源,增加妇女接受高等教育的机会,以期大幅减少对她们的暴力行为,特别是在这些非洲国家。

VAWG 的不良心理后果影响到妇女一生的各个阶段。在这方面,教育劣势不仅是普及教育和女孩受教育权的主要障碍;这有可能转化为妇女在劳动力市场的有限机会。

虽然基于性别的暴力可能发生在任何人、任何地方,但一些妇女和女孩特别容易受到伤害——例如,年轻女孩、被认为是同性恋或双性恋的妇女、移民和难民、土著妇女和少数民族,以及经历人道主义危机的妇女。

对妇女的暴力行为仍然是实现平等、发展、和平以及实现妇女和女童人权的障碍。

参考

[1]阅读更多关于消除对妇女暴力的信息:【https://www.un.org/en/events/endviolenceday/

[2]以上故事点我的互动画面:https://public.tableau.com/profile/bryan.tan.jun.wei#!/viz home/violence against woman _ 15853280846490/story 1

[3]原文即:https://public.tableau.com/profile/operation.fistula6589#!/viz home/international day for the elimination of violence against women/violence against women

财务报表发布对股票价格的影响

原文:https://towardsdatascience.com/effect-of-financial-statement-release-on-stock-prices-97932b2cb05?source=collection_archive---------10-----------------------

亨尼投资

一项研究分析了美国公司向美国证券交易委员会提交财报时的股价行为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片尼科埃尔尼诺拍摄

在正确的时间购买正确的股票是成功投资的基础。作为一名数据科学家,我相信在数据中发现模式,这在投资领域是非常有利可图的。在这篇文章中,我将探讨“关于公司的好消息引发股价上涨”的模式,并与您分享我的观察。

机会

我们中许多看图表的人可能已经注意到,财务报表的发布会对股票价格产生直接影响。下面是一个从 www.vhinny.com借来的例子,关于 KHC 股票对该公司 10 季度报告的反应。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www.vhinny.com/display/KHC

在公司发布业绩后,你可以看到几乎任何股票的价格都会立即发生变化(下跌或上涨)。看到这种行为,投资者可能会想到两个问题。首先,有没有办法在价格变动发生之前预测它的走向?第二个,一旦发生变动,股票会继续朝着可预测的方向移动吗?

虽然一些投资者可能会发现第一个挑战很有吸引力,并在预测价格波动中看到机会,但我会站在以沃伦巴菲特为首的伟人一边,他可以说是有史以来最伟大的投资者,并简单地说:“我不知道怎么做”。为了使股价在财务报表发布后立即上涨,不仅要超过公司过去的收益,还要超过分析师对当前收益的预期。我认为,预测这两个事件中的任何一个都是一个挑战,由于缺乏可靠的信息,散户投资者无法应对。因此,避免一起尝试这种挑战可能是值得的。

另一方面,预测股价变化的第二个挑战是普通投资者可以用他或她拥有的工具应对的挑战。在本文中,我将探讨年度财务报表(10-K)的发布是否包含可操作的信号,投资者可以使用这些信号来决定是否有机会在购买时获利。

资源

为了进行这项研究,我使用了包含 www.vhinny.com的 10k 发行日期和 www.alphavantage.co的股票价格的金融数据。你可以在我的 GitHub 页面上找到本文讨论的分析的完整参考代码。

问题陈述和范围

**目标:**在本研究中,我将调查一旦财务报表发布,市场对此做出初步反应,是否存在做出投资决策的机会。

**澄清:**许多财务报表在闭市期间发布。在 KHC 的例子中(见上图),市场在 2020 年 2 月 12 日以 30 美元收盘,财务报表(10-Q)在盘后时间发布,市场在 2 月 13 日开盘,定价 KHC 下跌 10%,当天收盘时为 27 美元。在这项研究中,问题不是价格是否会下降 10%。确切地说是以下内容。一旦价格下降了 10%,是否有证据表明会进一步下跌?

**数据集:**本研究使用的数据集由 S & P 500 指数覆盖的 479 家公司组成,代表 2018 年 1 月至 2019 年 12 月(2 年)评估的 11 个行业领域。

**方法:**为了生成这个数据集,我首先确定了调查期间发布的财务报表的所有(公司,日期)对。对于财务报表发布的每个特定日期,我都添加了(公司,日期)在该日期没有发布财务报表的公司对。为了保持数据集大小的可管理性,后一种公司配对是为与发布财务报表的公司在同一行业运营的公司创建的。例如,如果在 2020 年 2 月 19 日,只有公司 A(信息技术)和公司 B(医疗保健)发布了他们的声明(正面示例),则在该日期将只介绍来自相同两个部门(信息技术和医疗保健)的公司(负面示例)。所有可用的(公司,日期)对都被夸大以覆盖“日期”和“日期+ 7 天”之间的时间段,以提供对股票价格行为的可见性。

**插图:**下面我举一个例子,一家公司于 2018 年 1 月 22 日发布了其财务报表(申报日期)。后续 7 个日历日(n_calendar)跟踪股价,一般相当于 5 个交易日(n_trading)。我还在“close”列中包含了“filing_date”时的股价,在“close_next_n”列中包含了“date”时的股价,以及表示“close”和“close_next_n”之间的百分比变化的“percent_growth”。列“归档 _ 发布”是指示该公司是否在“归档 _ 日期”发布财务报表的标志。如果“归档 _ 发布”为 0,则意味着该公司没有发布其财务报表,并用于与其他发布了财务报表的公司进行比较。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意 company_id=2236 在其财务报表于 2018 年 1 月 22 日发布后,如何从 2018 年 1 月 23 日的 197.84 美元涨到 200.09 美元

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,该公司(190)的提交日期与 2018 年 1 月 22 日相同,并且没有发布其申请(filing_released=0)。它也没有显示在这 7 天中任何有形的价格变化。

**评估:**我想评估一份“好消息”财务报表的发布是否对股价产生可操作的影响。为此,我将比较发布财报的公司(正面例子)和没有发布财报的公司(负面例子)的股价增长。为了消除市场趋势的影响,引入反面例子并进行比较分析而不是看绝对增长数字是很重要的。例如,如果一家公司属于“下降趋势”行业,积极的收益报告可能会阻止股价下跌,而不是显示积极的趋势。从绝对业绩来看,我们可以得出结论,该公司的财务报表没有影响,而与同行业的其他公司相比,该公司的业绩高于平均水平。

结果和讨论

该数据集包含 944 家公司的样本(每家公司 2 个样本,2018 年至 2019 年间每年 1 个样本)。财务报表一旦发布,我们需要一些时间来评估它对公司来说是“好消息”还是“坏消息”。我用财务报表发布后的第一天来决定它是正面还是负面的报表。如果第一天的价格增长超过了一定的阈值,我称之为信号,并得出结论,该声明具有积极的影响(购买该股票的信号)。为了说明这种方法,让我们考虑第一天价格增长 1%的阈值。这使我们有 257 家公司的样本(截至申请日)通过了这一门槛。相比之下,我们有 24315 家样本公司在相应的申报日期没有发布任何信息。接下来,让我们看看正面和负面例子的价格在第一天之后是如何变化的,看看它们的表现是否不同。下图显示了自财务报表发布后第一天,正面和负面示例的价格增长分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在该柱状图中,X 轴代表 n_trading=1(不含)和 n_trading=3(含)之间的价格增长百分比(从捕获即时价格增长后的 2 天开始)。粉色条柱(申报已发布)代表发布报告的公司;紫色柱(普通日)代表没有发布报告的公司。y 轴显示直方图上相应条柱内的样本百分比。

“备案发布”公司的样本分布在-0.001 均值附近,标准差为 0.025,“普通日”公司的样本分布在 0.002 均值附近,标准差为 0.026。计算这些分布的 p 值得到 0.072,这意味着缺乏证据来推断这些分布是不同的。然而,我们可以观察到,与“普通日”直方图相比,“申请释放”直方图向左移动。事实上,这与我的预期相反,即积极的财务报告会为价格在不久的将来向同一方向发展提供动力。

改变参数

现在我已经建立了实验,让我们看看阈值和偏移值的不同参数组合是否会产生不同的结果。我将使用 0.5%、1%和 1.5%的阈值来选择发布报告的公司的“正面例子”。我还将使用等于 1、2、3 和 4 的天数来评估股票价格的变化。这给了我们 3*4 = 12 种可能的参数组合。表现最好的组合(最低 p 值为 0.001)是阈值= 1%和移位= 4 天。下面是这个实验的分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“备案发布”公司的样本分布在-0.006 均值附近,标准差为 0.034,“普通日”公司的样本分布在 0.002 均值附近,标准差为 0.038。虽然这个实验确实具有较低的 p 值,这意味着分布中的差异具有统计学意义,但它使我们进一步远离了验证收益报告可以在财务报表发布后被用作积极信号,并且市场已经做出了最初的举动。

比较同一部门内的结果

到目前为止,该分析是针对数据集中不同行业的所有公司进行的。有人可能会说,不同的行业可能有不同的价格动态。因此,对我们“正面例子”来说,某些行业的上升趋势可能会超过报表驱动的运动。为了研究这个想法,我将每个实验的范围缩小到相同行业的公司,并进行相同的测试。下面是医疗保健部门的一项实验的摘录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

摘自 Jupyter 笔记本,补充本文

我鼓励读者参考本文附带的 Jupyter 笔记本了解详情。总之,这些测试没有提供令人信服的证据来支持财务报表发布事件具有作为投资者购买股票的信号的有形潜力的假设。

结论

在这项研究中,我旨在调查财务报表(10-K)的发布是否可以用作购买股票的信号。为了验证我的假设,我进行了一些实验,将发布财务报表的公司和不发布财务报表的公司的表现进行了比较。

这些实验没有显示支持本研究假设的证据,即看看投资者是否能在财报发布后观察到价格变化,并在趋势的方向和强度变得明确后加入趋势。

我请读者记住,这不是一个深入的分析,而是一个概念探索的快速证明。深入研究的机会包括调查公司年龄、市值、融资结构等各种细分。但是,作为一个投资者,我相信有更多有希望找到信号的地方应该首先探索。

[## 新冠肺炎在股票市场上横冲直撞。机器学习来解释。

使用机器学习来识别新冠肺炎期间受打击最大的股票中的共同因素。

towardsdatascience.com](/covid-19-rampage-on-the-stock-market-machine-learning-comes-to-explain-3332707954af)

我们连线吧!

我很高兴与和我有共同道路的人联系,这是对财务独立的追求。如果你也在寻求经济独立,或者你想和 T2 合作,交流想法,请随时联系我们!以下是一些可以找到我的地方:

  • 【www.vhinny.com——投资研究平台,为您自己的分析提供金融数据
  • https://www.linkedin.com/company/vhinny——加入我们在 LinkedIn 上的社区,在那里我和其他贡献者分享与投资相关的内容

干杯!

用于神经网络训练的梯度下降优化器

原文:https://towardsdatascience.com/effect-of-gradient-descent-optimizers-on-neural-net-training-d44678d27060?source=collection_archive---------24-----------------------

Apurva Pathak 合著

尝试梯度下降优化器

欢迎来到我们深度学习实验系列的另一部分,在这里我们进行实验来评估关于训练神经网络的常见假设。我们的目标是更好地理解影响模型训练和评估的不同设计选择。为了做到这一点,我们提出了关于每个设计选择的问题,然后运行实验来回答它们。

在本文中,我们试图更好地理解使用不同优化器的影响:

  • 不同的优化器在实践中表现如何?
  • 每个优化器对学习率或动量等参数选择的敏感程度如何?
  • 每个优化器的收敛速度有多快?
  • 选择一个好的优化器会带来多大的性能差异?

为了回答这些问题,我们评估了以下优化器:

  • 随机梯度下降
  • 带动量的 SGD
  • 内斯特罗夫势头强劲的新加坡元
  • RMSprop
  • 圣经》和《古兰经》传统中)亚当(人类第一人的名字
  • 阿达格拉德
  • 循环学习率

实验是如何设置的?

我们使用不同的优化器训练神经网络,并比较它们的性能。这些实验的代码可以在 Github 的上找到。

  • 数据集:我们使用猫狗数据集,它由 23,262 张猫狗图片组成,在两个类之间对半分割。由于图像大小不同,我们将它们调整到相同的大小。我们使用数据集的 20%作为验证数据(开发集),其余的作为训练数据。
  • 评估度量:我们使用验证数据上的二进制交叉熵损失作为测量模型性能的主要度量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:来自猫狗数据集的样本图像

  • 基本模型:我们还定义了一个受 VGG16 启发的基本模型,在这里我们重复应用(卷积->最大池-> ReLU ->批处理范数->丢弃)运算。然后,我们展平输出体积,并将其馈入两个完全连接的层(密集-> ReLU ->批处理-规范),每个层有 256 个单位,并在第一个 FC 层后丢弃。最后,我们将结果输入到一个具有 sigmoid 激活的单神经元层,产生一个介于 0 和 1 之间的输出,告诉我们该模型预测的是猫(0)还是狗(1)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:基本模型架构(使用 NN SVG 创建)

  • 训练:我们使用 32 的批量大小和默认的权重初始化(Glorot uniform)。默认优化器是 SGD,学习率为 0.01。我们进行训练,直到验证损失在 50 次迭代中没有改善。

随机梯度下降

我们首先从普通的随机梯度下降开始。这由以下更新公式定义:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3: SGD 更新公式

其中 w 是权重向量,dw 是损失函数相对于权重的梯度。这个更新规则向损失函数的最大下降方向迈出了一步,帮助我们找到一组使损失最小化的权重。请注意,在纯 SGD 中,更新是针对每个示例应用的,但更常见的是对一批示例(称为小批)进行计算。

学习率如何影响 SGD?

首先,我们探讨学习率如何影响 SGD。众所周知,选择过低的学习速率会导致模型收敛缓慢,而过高的学习速率会导致模型根本不收敛。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:优化器收敛图解,摘自杰瑞米·乔登网站

为了通过实验验证这一点,我们沿着 0.001 和 0.1 之间的对数标度改变学习速率。让我们先画出训练损失。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:不同学习率下 SGD 的培训损失曲线

我们确实观察到,当学习率既不太小也不太大(红线)时,性能是最佳的。最初,增加学习率会加快收敛,但在学习率为 0.0316 之后,收敛实际上会变得更慢。这可能是因为步长越大,实际上可能会超过最小损耗,如图 4 所示,从而导致更高的损耗。

现在让我们画出验证损失图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:不同学习率下 SGD 的验证损失曲线

我们观察到,当我们选择太小或太大的学习率时,验证性能会受到影响。太小(例如 0.001),验证损失根本不会减少,或者减少得非常慢。太大(例如 0.1)并且验证损失不能达到较小学习率所能达到的最低值。

现在让我们画出每个学习率*所达到的最佳培训和验证损失:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7:不同学习率下 SGD 的最小培训和验证损失

上述数据证实了“金发女孩”理论,即选择一个既不太小也不太大的学习率,因为最佳学习率(3.2e-2)在我们尝试的值范围的中间。

*通常,我们预计验证损失会高于训练损失,因为模型之前没有看到验证数据。然而,我们从上面可以看到,验证损失有时比训练损失要低得多。这可能是由于脱落,因为神经元仅在训练时脱落,而不是在评估期间脱落,导致评估期间的性能比训练期间更好。当辍学率较高时,这种影响可能特别明显,就像我们的模型一样(FC 层上的辍学率为 0.6)。

最佳新币验证损失

  • 最佳验证损失:0.1899
  • 相关培训损失:0.1945
  • 时代收敛到最小值:535
  • 参数:学习率 0.032

新币外卖

  • 选择一个好的学习率(不要太大,也不要太小)对于确保 SGD 的最佳性能至关重要。

带动量的随机梯度下降

概观

带动量的 SGD 是 SGD 的变体,通常比普通 SGD 收敛得更快。它通常定义如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8:用动量更新 SGD 方程

good fellow 等人的深度学习解释了算法背后的物理直觉[0]:

形式上,动量算法引入了一个扮演速度角色的变量v——它是参数在参数空间中移动的方向和速度。速度被设置为负梯度的指数衰减平均值。

换句话说,参数以随时间变化的速度穿过参数空间。速度的变化由两项决定:

  • 𝛼,学习率,它决定了梯度对速度的影响程度
  • 𝛽,速度随时间衰减的速率

因此,速度是梯度的指数平均值,它包含新的梯度,并随着时间的推移自然衰减旧的梯度。

人们可以想象一个球从山上滚下来,速度越来越快。重力对球施加力,使其加速或减速,如梯度项𝛼 ** dw* 所示。球也会遇到粘性阻力,导致其速度衰减,正如𝛽.所描述的那样

动量的一个作用是加速沿着梯度方向一致的维度的更新。例如,考虑梯度为常数 c 时动量的影响:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9:梯度为常数 c 时速度随时间的变化。

普通的 SGD 每次都会更新 - 𝛼 c ,而具有动量的 SGD 会随着时间加速,最终达到比普通更新大 1/1-𝛽倍的最终速度(使用无穷级数的公式得出)。例如,如果我们将动量设置为𝛽=0.9,那么更新最终会变成普通更新的 10 倍。

动量的另一个作用是抑制振荡。例如,考虑这样一种情况,即渐变经常沿着某个维度弯曲并改变方向:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 10:动量图,来自 Ekaba Bisong 的更多关于优化技术的内容

动量项抑制了振荡,因为当我们把振荡项加到速度中时,它们就抵消了。这允许更新由梯度始终指向相同方向的维度支配。

实验

让我们看看学习率为 0.01 时动量的作用。我们尝试动量值[0,0.5,0.9,0.95,0.99]。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11:学习率为 0.01 时动量对训练损失(左)和验证(右)的影响。

上面,我们可以看到,将动量增加到 0.9 有助于模型训练更快地收敛,因为训练和验证损失以更快的速度减少。然而,一旦我们超过 0.9,我们观察到训练损失和验证损失实际上受到影响,模型训练完全不能收敛于动量 0.99。为什么会这样?这可能是因为过大的动量阻止模型适应梯度更新中的新方向。另一个潜在的原因是权重更新变得如此之大,以至于超过了最小值。然而,这仍是未来调查的一个领域。

我们是否观察到振荡的减少,这被吹捧为动量的好处?为了测量这一点,我们可以计算每个更新步骤的振荡比例,即与之前的更新相比,当前更新中有多少比例的参数更新具有相反的符号。事实上,增加动量会降低振荡参数的比例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 12:动量对振荡的影响

更新的大小呢——动量的加速属性增加了更新的平均大小吗?有趣的是,动量越高,初始更新越大,但后期更新越小:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 13:动量对平均更新大小的影响

因此,增加动量导致采取较大的初始步骤,但较小的后续步骤。为什么会这样呢?这可能是因为动量最初受益于加速度,导致初始步长更大。后来,动量导致振荡抵消,这可能使后面的步骤更小。

支持这种解释的一个数据点是每个时期所经过的距离(定义为时期开始时的权重和时期结束时的权重之间的欧几里德距离)。我们看到,尽管动量值越大,后面的步长越小,但实际上它们移动的距离越大:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 14:对于每个动量值,每个时期遍历的距离。

这表明,即使增加动量值会导致后面的更新步骤变得更小,但遍历的距离实际上更大,因为这些步骤更有效——它们不会经常相互抵消。

现在,让我们看看动量对一个小的学习率(0.001)的影响。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 15:学习率为 0.001 时动量对训练损失(左)和验证损失(右)的影响。

令人惊讶的是,在小的学习率上增加动力有助于它收敛,而以前没有!现在,让我们来看一个大的学习率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 16:学习率为 0.1 时动量对训练损失(左)和验证损失(右)的影响。

当学习率较大时,增加动量会降低性能,甚至会导致模型无法收敛(参见上面对应于动量 0.9 和 0.95 的平线)。

现在,为了概括我们的观察结果,让我们看看所有学习速率和动量的最小训练损失和验证损失:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 17:不同学习速度和动量下的最小训练损失(左)和验证损失(右)。每行中的最小值以绿色突出显示。

我们看到学习率和动量密切相关——学习率越高,“可接受的”动量值(即不会导致模型训练发散的值)的范围越低。相反,动量越高,可接受的学习率范围越低。

总的来说,所有学习率的行为表明,增加动量的效果类似于增加学习率。它有助于较小的学习率收敛(图 14),但可能导致较大的学习率发散(图 15)。如果我们考虑图 9 中的终端速度解释,这是有意义的——增加动量可以导致更新达到比普通更新本身大得多的终端速度。

然而,请注意,这并不意味着增加动量与增加学习速率是相同的——在增加动量和增加学习速率之间的收敛/发散行为方面有一些简单的相似之处。更具体地说,正如我们在图 12 和图 13 中看到的,动量也会减少振荡,并在训练开始时预先加载大量更新——如果我们只是提高学习速率,我们不会观察到相同的行为。

动量的另一种表述

还有另一种定义动量的方法,表述如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 18:动量的替代定义

吴恩达在 Coursera 的深度学习专业中使用了动量的定义。在这个公式中,速度项是梯度的指数移动平均值,由参数β控制。更新被应用于权重,更新的大小由学习速率α控制。注意,当展开时,这个公式在数学上与第一个公式相同,除了所有项都乘以 1-β。

这种动量公式在实践中是如何工作的?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 19:动量(替代公式)对训练损失(左)和验证损失(右)的影响

令人惊讶的是,使用这种替代公式,看起来增加动量实际上减慢了收敛!

为什么会这样呢?这种动量公式虽然抑制了振荡,但并不像另一种公式那样具有加速的好处。如果我们考虑一个玩具的例子,其中梯度总是一个常数 c ,我们看到速度永远不会加速:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 20:恒定 c 的重复梯度下速度随时间的变化

事实上,吴恩达认为,这种动量公式的主要好处不是加速度,而是它抑制振荡的事实,允许你使用更大的学习速率,从而更快地收敛。基于我们的实验,增加动量本身(在这个公式中)而不增加学习速率不足以保证更快的收敛。

SGD 最佳验证损失与动量

  • 最佳验证损失:0.2046
  • 相关培训损失:0.2252
  • 聚合到最小值的时期:402
  • 参数:学习率 0.01,动量 0.5

带动力外卖的新加坡元

  • 基于我们测试的参数,动量导致模型训练收敛更快,但不能保证改善最终的训练或验证损失。
  • 学习率越高,可接受动量值的范围越低(模型训练收敛的范围)。

具有内斯特罗夫动量的随机梯度下降

动量的一个问题是,虽然梯度总是指向最大损失减少的方向,但动量可能不是。为了校正这一点,内斯特罗夫动量在一个前瞻点(w +速度)而不是 w 处计算梯度。这给梯度一个校正动量项的机会。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 21:内斯特罗夫更新。左图:插图。右图:方程式。

为了说明内斯特罗夫如何帮助训练更快地收敛,让我们看一个虚拟的例子,其中优化器试图下降一个碗形的损失表面,最小值在碗的中心。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 22。左:常规动量。右图:内斯特罗夫动量。

如图所示,内斯特罗夫收敛更快,因为它在一个前瞻点计算梯度,从而确保更新更快地接近极小值。

让我们在我们用于常规动量的学习率和动量的子集上尝试内斯特罗夫,看看它是否能加速收敛。我们来看看学习率 0.001 和动量 0.95:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 23:内斯特罗夫动量对 lr 0.001 和动量 0.95 的影响。

在这方面,内斯特罗夫似乎确实在迅速加快收敛速度!如果我们把动量增加到 0.99 呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 24:内斯特罗夫动量对 lor 0.001 和动量 0.99 的影响。

现在,内斯特罗夫实际上在训练损失上收敛得更慢,虽然它最初在验证损失上收敛得更快,但它变慢了,并在大约 50 个时代后被动量超过。

我们应该如何衡量所有训练运行的收敛速度?让我们看看常规动量在 50 个时代后的损失,然后确定内斯特罗夫需要多少个时代才能达到同样的损失。我们将收敛比定义为这个历元数除以 50。如果它小于 1,那么内斯特罗夫比常规动量收敛得更快;相反,如果它更大,那么内斯特罗夫收敛得更慢。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 25。50 个时期后,内斯特罗夫损失收敛到常规动量损失的时期比率。内斯特罗夫跑得更快的训练用绿色突出显示;红色较慢;内斯特罗夫和常规动量都没有汇聚成黄色。

我们看到,在大多数情况下(10/14),加入内斯特罗夫会导致训练损失下降得更快,如表 5 所示。这同样适用于表 6 中验证损失的较小程度(8/12)。

添加内斯特罗夫的加速和其他参数(学习速率和动量)之间似乎没有明确的关系,尽管这可能是未来研究的一个领域。

内斯特罗夫势头的新币最佳验证损失

  • 最佳验证损失:0.2020
  • 相关培训损失:0.1945
  • 聚合到最小值的时期:414
  • 参数:学习率 0.003,动量 0.95

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 26。每次训练运行达到的最小训练和验证损失。每行中的最小值以绿色突出显示。

带内斯特罗夫动力外卖的新加坡元

  • 内斯特罗夫动量法计算前瞻点处的梯度,以说明动量效应。
  • 与常规动量相比,内斯特罗夫通常收敛得更快。

RMSprop

在 RMSpropr 中,我们对每个权重参数执行以下操作:

  • 保持平方梯度的移动平均值。
  • 将梯度除以移动平均值的平方根,然后应用更新。

更新方程式如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 27: RMSprop 更新方程—改编自吴恩达的深度学习专业

这里,rho 是一个超参数,它定义了移动平均线适应新术语的速度,rho 越高,移动平均线变化越慢。ε是一个小数字,用来防止被零除。α是学习率,w_i 是权重 I,a_i 是移动平均值,dw_i 是权重 I 的梯度。

RMSprop 在概念层面上试图做什么?RMSprop 正在尝试规范化更新的每个元素,以便没有一个元素过大或过小。作为一个例子,考虑一个权重参数,其中梯度是5,5,5.第二个等式中的分母是 5,因此应用的更新将是-[1,1,1]。现在,考虑一个权重参数,其中梯度为[0.5,0.5,0.5];分母将是 0.5,给出与前一种情况相同的更新-[1,1,1]!换句话说,RMSprop 更关心每个权重的符号(+或-),而不是幅度,并尝试对每个权重的更新步长进行标准化。

这不同于普通的 SGD,后者对具有较大梯度的权重参数应用较大的更新。考虑上面的例子,其中梯度是[5,5,5],我们可以看到结果更新将是-[5,5,5],而对于[0.5,0.5,0.5]的情况,更新将是-[0.5,0.5,0.5]。

学习率和 rho 如何影响 RMSprop?

让我们在改变学习率𝛼(默认为 0.001)和系数𝜌(默认为 0.9)的情况下尝试 RMSprop。让我们首先尝试设置𝜌 = 0,并改变学习率:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 28:不同学习速率下的 RMSProp 训练损失,rho = 0。

第一个教训是——看起来𝜌=0 的 RMSProp 表现不佳。这导致更新如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 29:rho = 0 时的 RMSprop

为什么这不能很好地执行是未来研究的一个领域。

让我们在非零ρ值上再试一次。我们首先绘制了小学习率(1e-3)的训练和验证损失。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 30:不同 rho 值下的 RMSProp,学习速率为 1e-3。

增加 rho 似乎减少了训练损失和验证损失,但是随着收益递减,当 rho 从 0.95 增加到 0.99 时,验证损失停止改善。

现在让我们来看看当我们使用更大的学习率时会发生什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 31:不同 rho 值下的 RMSProp,学习速率为 3e-2。

在这里,训练和验证的损失完全不一致!

让我们看看所有参数的最小培训和验证损失:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 32:不同学习速率和 rho 值下 RMSprop 的最小训练损失(左)和最小验证损失(右)。每行中的最小值以绿色突出显示。

从上面的图中,我们发现一旦学习率达到 0.01 或更高,RMSprop 就无法收敛。因此,这里找到的最佳学习率大约是 SGD 上的最佳学习率的十分之一!一种假设是分母项比 1 小得多,因此它有效地扩大了更新。因此,我们需要向下调整学习率来补偿。

关于𝜌,我们可以从上面的图表中看到,RMS 在高𝜌值(0.9 到 1)的数据中表现最佳。尽管 Keras 文档建议使用𝜌=0.9 的默认值,但也值得探索其他值——当我们将 rho 从 0.9 增加到 0.95 时,它大大改善了最佳获得验证损失,从 0.2226 增加到 0.2061。

RMSprop 上的最佳验证损失

  • 最佳验证损失:0.2061
  • 相关培训损失:0.2408
  • 聚合到最小值的时期:338
  • 参数:学习率 0.001,ρ0.95

RMSprop 外卖

  • RMSprop 似乎在比普通 SGD 小得多的学习速率下工作(大约小 10 倍)。这可能是因为我们将原始更新(dw)除以平均梯度。
  • 此外,探索不同的 𝜌 值似乎是值得的,这与 Keras 文档推荐使用默认值相反。

圣经》和《古兰经》传统中)亚当(人类第一人的名字

Adam 有时被认为是首选的优化器,因为它比 SGD 和其他优化方法收敛得更快[1]。本质上是 SGD 与 momentum 和 RMSProp 的结合。它使用以下更新公式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 33: Adam 更新等式

本质上,我们保留了一个类似于动量项的速度项——它是梯度更新的指数平均值。我们还保留一个平方项,它是梯度平方的指数平均值,类似于 RMSprop。我们也用(1—β)来修正这些项;否则,指数平均值将在开始时以较低的值开始,因为没有要平均的先前项。然后,我们将修正后的速度除以修正后的平方项的平方根,并将其作为我们的更新。

学习率如何影响 Adam?

有人建议学习率比β1 和β2 参数更重要,所以让我们首先尝试改变学习率,对数标度从 1e-4 到 1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 34:不同学习率下 Adam 的培训损失(左)和验证损失(右)。

我们没有绘制 0.03 以上的学习率,因为它们没有收敛。我们发现,随着学习速度的提高,训练和验证的损失会更快地减少——但只是到了一定程度。一旦我们将学习率提高到 0.001 以上,训练和验证损失都开始变得更糟。这可能是由于图 4 所示的“过冲”行为。

那么,哪种学习率最好呢?让我们通过绘制每一个的最佳验证损失来找出答案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 35:不同学习率下 Adam 的最小培训和验证损失。

我们看到学习率 0.001(碰巧是默认学习率)上的验证损失似乎是最好的,为 0.2059。对应的训练损失为 0.2077。然而,这仍然比最好的 SGD 运行差,后者实现了 0.1899 的验证损失和 0.1945 的训练损失。我们能战胜它吗?让我们试着改变β1 和β2 看看。

β1 和β2 是如何影响 Adam 的?

我们对β1 和β2 尝试以下值:

beta_1_values = [0.5, 0.9, 0.95]
beta_2_values = [0.9, 0.99, 0.999]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 beta _ 1 和 beta_2 不同值的训练损失(左)和验证损失(右)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 37:最小培训损失(左)和最小验证损失(右)。每行中的最小值以绿色突出显示。

最佳运行是β1=0.5 和β2=0.999,这实现了 0.2071 的训练损失和 0.2021 的验证损失。我们可以将其与 Adam 的默认 Keras 参数(β1=0.9 和β2=0.999)进行比较,后者分别达到 0.2077 和 0.2059。因此,与 Keras 文档中的建议相反,使用不同的 beta_1 和 beta_2 值进行实验会有所回报,但改善并不大。

令人惊讶的是,我们无法击败最好的 SGD 性能!原来别人也注意到了,用动量或者其他优化算法,Adam 有时候效果比 SGD 差[2]。虽然原因超出了本文的范围,但它表明尝试不同的优化器以找到最适合您的数据是值得的。

最佳亚当验证损失

  • 最佳验证损失:0.2021
  • 相关培训损失:0.2071
  • 时代收敛到最小值:255
  • 参数:学习率 0.001,β1=0.5,β2=0.999

亚当外卖

  • 与其他优化器相比,Adam 不能保证获得最佳的训练和验证性能,因为我们发现 SGD 优于 Adam。
  • 尝试β1 和β2 的非默认值可以稍微改善模型的性能。

阿达格拉德

Adagrad 累加梯度的平方,并将更新除以该累加器项的平方根。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 38: Adagrad 更新方程[3]

这与 RMSprop 类似,但区别在于它只是累加梯度的平方,而不使用指数平均值。这应该会导致更新的大小随着时间的推移而衰减。

让我们以不同的学习率来尝试 Adagrad,从 0.001 到 1。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 39:不同学习速度下的 Adagrad。左:训练失利。右图:验证损失。

使用 3e-1 的学习率,最佳的训练和验证损失是 0.2057 和 0.2310。有趣的是,如果我们使用相同的学习率与 SGD 进行比较,我们注意到 Adagrad 最初与 SGD 并驾齐驱,但在后来的时代开始落后。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 40: Adagrad 与 SGD 在相同学习速率下的对比。左:训练失利。右图:验证损失。

这可能是因为 Adagrad 最初被一个小数字除,因为梯度累加器项还没有累加许多梯度。这使得更新可以与 SGD 在初始时期的更新相媲美。然而,随着累加器项累积更多的梯度,Adagrad 更新的大小减小,因此损耗开始变平或者甚至上升,因为它变得更加难以达到最小值。

令人惊讶的是,当我们使用大的学习率(3e-1)时,我们观察到相反的效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 41:大学习率(0.316)下 Adagrad vs SGD。左:训练失利。右图:验证损失。

在大的学习速率下,Adagrad 实际上比 SGD 收敛得更快!一种可能的解释是,当大的学习率导致 SGD 采取过大的更新步骤时,Adagrad 将更新除以累加器项,本质上使更新更小且更“最优”

让我们看看所有参数的最小训练和验证损失:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 Adagrad 的最小训练和验证损失。

我们可以看到,Adagrad 的最佳学习率为 0.316,明显大于 SGD 的最佳学习率 0.03。如上所述,这很可能是因为 Adagrad 除以累加器项,导致更新的有效大小较小。

阿达格拉德最佳验证失败

  • 最佳验证损失:0.2310
  • 相关培训损失:0.2057
  • 聚合到最小值的时期:406
  • 参数:学习率 0.312

阿达格拉德外卖店

  • Adagrad 累加梯度的平方,然后将更新除以累加器项的平方根。
  • Adagrad 的更新量会随着时间的推移而减少。
  • 【Adagrad 的最优学习速率比 SGD 大(在我们的例子中至少是 10 倍)。

循环学习率

循环学习率是一种让学习率在最小值和最大值之间循环变化的方法[4]。它声称消除了调整学习率的需要,并且可以帮助模型训练更快地收敛。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 43:使用三角周期的周期学习率

我们尝试具有合理学习速率界限(base_lr=0.1,max_lr=0.4)的循环学习速率,并且步长等于 4 个历元,这在作者建议的 4-8 范围内。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 44:循环学习率。左:列车失联。右图:验证损失。

由于学习率的周期性变化,我们观察到训练损失的周期性振荡。我们在验证损失中也看到了较小程度的这些振荡。

最佳 CLR 培训和验证损失

  • 最佳验证损失:0.2318
  • 相关培训损失:0.2267
  • 时代收敛到最小值:280
  • Params:使用上述设置。但是,我们可以通过调整周期策略(例如,允许最大和最小界限衰减)或调整最大和最小界限本身来获得更好的性能。请注意,这种调整可能会抵消 CLR 声称可以节省的时间。

CLR 外卖

  • CLR 在最小和最大界限之间循环改变学习率。
  • CLR 有可能消除调整学习率的需要,同时获得相似的性能。然而,我们没有取得类似的业绩。

比较

那么,经过上面的所有实验,哪一个优化器最终工作得最好呢?让我们从每个优化器中选择最佳运行,即验证损失最低的优化器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 45:每个优化器实现的最佳验证损失。

令人惊讶的是,SGD 获得了最好的验证损失,而且是以显著的优势获得的。然后,我们有 SGD 与内斯特罗夫动量,亚当,SGD 与动量,和 RMSprop,他们都表现相似。最后,Adagrad 和 CLR 排名最后,损失明显高于其他公司。

培训流失怎么办?让我们画出上面选择的跑步的训练损失:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 46:对于上面选择的最佳运行,每个优化器实现的训练损失。

在这里,我们看到了一些与验证损失的相关性,但 Adagrad 和 CLR 的表现比它们的验证损失所暗示的要好。

融合呢?让我们首先来看看每个优化器收敛到最小验证损失需要多少个时期:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 47:收敛到极小值的次数。

亚当显然是最快的,而 SGD 是最慢的。

然而,这可能不是一个公平的比较,因为每个优化器的最小验证损失是不同的。测量每个优化器达到固定验证损失需要多少个时期怎么样?让我们取最差的最小验证损失 0.2318(CLR 达到的损失),并计算每个优化器达到该损失需要多少个时期。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 48:收敛到最差最小验证损失的周期数(0.2318,由 CLR 实现)。

同样,我们可以看到 Adam 确实比任何其他优化器更快地收敛到给定的损失,这是其声称的优势之一。令人惊讶的是,有动量的新币似乎比香草新币收敛得更慢!这是因为具有动量轮的最佳 SGD 所使用的学习率低于最佳普通 SGD 所使用的学习率。如果我们保持学习速率不变,我们会发现动量事实上的确会加速收敛:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 49:比较 SGD 和带动量的 SGD。

如上所述,最佳香草 SGD 运行(蓝色)比具有动量运行(橙色)的最佳 SGD 收敛得更快,因为学习率为 0.03,高于后者的 0.01。然而,当通过与学习速率为 0.01(绿色)的普通 SGD 进行比较来保持学习速率不变时,我们看到增加动量确实加快了收敛。

为什么亚当打不过香草 SGD?

正如在 Adam 一节中提到的,其他人也注意到 Adam 有时在动量或其他优化算法方面比 SGD 更差[2]。引用 Vitaly Bushaev 关于 Adam 的文章,“过了一段时间,人们开始注意到,尽管训练时间很长,Adam 在某些领域并没有收敛到最优解,因此对于一些任务(例如在流行的 CIFAR 数据集上的图像分类),最先进的结果仍然只能通过应用具有动量的 SGD 来实现。”[2]虽然确切的原因超出了本文的范围,但其他人已经表明 Adam 可能收敛到次优解,即使是在凸函数上。

结论

总的来说,我们可以得出结论:

  • 你应该调整你的学习率——它对你的模型的性能有很大的影响,甚至比优化器的选择更大。
  • 根据我们的数据,vanilla SGD 的表现最好,但 Adam 的表现也差不多,只是收敛速度更快。
  • 值得尝试 RMSprop 中的 rho 和 Adam 中的 beta 值的不同值,尽管 Keras 建议使用默认参数。

参考

https://www.deeplearningbook.org/contents/optimization.html

[1]迪德里克·p·金马和吉米·巴雷。 Adam:一种随机优化的方法。2014.arXiv:1412.6980v9

[2]https://towards data science . com/Adam-latest-trends-in-deep-learning-optimization-6be 9a 291375 c

[3]https://ruder . io/optimizing-gradient-descent/index . html # adagrad

[4]莱斯利·史密斯。https://arxiv.org/pdf/1506.01186.pdf

异常值的影响

原文:https://towardsdatascience.com/effect-of-outliers-in-classification-ed7e8b6d39f8?source=collection_archive---------43-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

威尔·梅尔斯在 Unsplash 上拍照

介绍

当我们开始处理数据时,我们(通常总是)观察到数据中几乎没有错误,比如缺失值、异常值、没有适当的格式等等。简而言之,我们称之为不一致性。这种一致性或多或少会扭曲数据,并妨碍机器学习算法进行正确预测。

在本文中,我们将尝试了解异常值如何影响机器学习算法的准确性,以及缩放如何帮助或影响我们的学习。为了简化目标,我们使用了两种非参数算法,k-NN 和决策树。

关于数据集

我们将使用从 UCI 机器学习库获得的埃及患者的丙型肝炎病毒(HCV)数据集。可从以下渠道获得:

http://archive . ics . UCI . edu/ml/datasets/肝炎+丙型+病毒+% 28 HCV % 29+for+埃及+患者

该数据包含了接受了约 18 个月 HCV 治疗剂量的埃及患者。共有 1385 名患者具有 29 种属性。这些属性包括年龄、白细胞计数、红细胞计数、血小板计数等。

处理数据

首要的事情是用 python 加载数据和所需的库。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
pd.set_option('display.max_columns', None) # This will help yoy view all the columns rather than the sample when using *dataframe.head()*df = pd.read_csv('HCV-Egy-Data.csv')
df.head()

一旦我们通过数据集,它几乎建议检查是否有任何我们前面提到的不一致。为此,我们将使用 python 的 info 函数。

df.info()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

df.info()结果

在这里,我们观察到我们没有任何丢失的值,并且由于数据是数字数据,我们可以确定所有的属性值都是数字的,即 int64 或 float64 类型。此外,没有空值,因此我们可以使用我们的数据来建模。

我们还想看看是否有异常值,在 pandas 库中的一个快速检查是使用 describe() 函数。它为我们提供了所需的统计数据,如最小-最大值、分位数、标准偏差等。

df.describe() 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里,我们观察到 RNA EOT 的最小值为 5,这与我们的*平均值相差甚远。*现在我们确定至少有一个异常值。因此,我们将看到如何处理异常值影响我们的模型。

目标变量:基线组织学分期

一点背景,如果活检获得的组织足够大,观察者之间的一致是非常好的,特别是对于纤维化。为了帮助标准化病理学家之间的组织学评估,特别是提高从事不同临床试验的不同研究者之间的组织学测量的客观性,几个小组已经提出了用于分级活动和分期纤维化的组织学方案。在 Metavir 系统中,将坏死性炎症活性分级为 0-3 级。对于与疾病阶段的预处理评估问题更相关的量化纤维化,HAI、改良 HAI 和 Metavir 系统依赖于 0 至 4 或 0 至 6 的标度。

我们将使用 Metavir 系统,因为它给了我们 4 个多级分类,并取消了“基线组织学分级”,因为它们符合相同的逻辑。

df = df.drop('Baseline histological Grading',axis=1)

建模

由于我们的数据在不同的尺度上,我们执行了缩放以将每个属性放在一个共同的尺度上。这将进一步减少异常值的影响。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(df.drop('Baselinehistological staging',axis=1))
scaled_features = scaler.transform(df.drop('Baselinehistological staging',axis=1))
df_feat = pd.DataFrame(scaled_features,columns=df.columns[:-1])
df_feat.head()

我们将利用 scikit-learn 库对我们的数据进行拆分和建模。

from sklearn.model_selection import train_test_split
X = df.drop('Baselinehistological staging',axis=1)
y = df['Baselinehistological staging']
X_train, X_test, y_train, y_test = train_test_split(scaled_features,df['Baselinehistological staging'],
                                                    test_size=0.20)# here test_size = 20 tells us that the data is split into train 80/20 ratio. 

K-最近邻(k-NN)

一旦我们将数据分成训练和测试数据集,我们就可以运行 k = 1 或(n_neighbors = 1)的 k-NN 算法,并检查数据的准确性。

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)
pred = knn.predict(X_test)
from sklearn.metrics import classification_report,confusion_matrix
print(confusion_matrix(y_test,pred))
print(classification_report(y_test,pred))

该模型的精确度为 24%,总体来说很差,但这不是我们的目标。我们可以运行肘法来选择最佳的 k 值。

error_rate = []# Will take some time
for i in range(1,40,2):

    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(X_train,y_train)
    pred_i = knn.predict(X_test)
    error_rate.append(np.mean(pred_i != y_test))plt.figure(figsize=(10,6))
plt.plot(range(1,40,2),error_rate,color='blue', linestyle='dashed', marker='o', markerfacecolor='red', markersize=10)
plt.title('Error Rate vs. K Value')
plt.xlabel('K')
plt.ylabel('Error Rate')

其中我们看到最小误差率为 k = 35,精度为 31 %。

决策树

# decision Tree classifier 
from sklearn.tree import DecisionTreeClassifier
dtree = DecisionTreeClassifier()
dtree.fit(X_train,y_train)
pred = dtree.predict(X_test)print(confusion_matrix(y_test,pred))
print(classification_report(y_test,pred))

运行上述代码,我们观察到准确率为 25 %,未能超过 k-NN。

移除异常值

我们将移除超出数据的 2 %和 98 %的异常值。

# Remove Outliers 
df1 = df
col = list(df1.drop('Baselinehistological staging',axis=1).columns)
for i in col:
    y = df[i]
    removed_outliers = y.between(y.quantile(.02), y.quantile(.98))
    index_names = df[~removed_outliers].index 
    df.drop(index_names, inplace=True)

我们观察到 k-NN 在 k =1 时的准确度为 28%,提高了约 16%。类似地,在 k = 21 时,给出了 33%,这大约增加了 6%,但是,对于决策树,我们的准确度几乎降低了 4%。

结论

我们可以得出结论,去除异常值增加了模型的准确性。尽管它在 k-NN 中显著提高了准确性,但在决策树中却降低了。这就引出了我们分析的下一步,即参数调整。我们将深入研究参数调整,以实现更高的精度。

参考

有效的利他主义、人工智能安全以及从世界状态中学习人类偏好

原文:https://towardsdatascience.com/effective-altruism-ai-safety-and-learning-human-preferences-from-the-state-of-the-world-83b1141585e3?source=collection_archive---------47-----------------------

苹果 | 谷歌 | SPOTIFY | 其他

Rohin Shah 在 TDS 播客

要选择章节,请访问我们的 Youtube 视频这里

编者按:这一集是我们关于数据科学和机器学习新兴问题的播客系列的一部分由 Jeremie Harris 主持。除了主持播客,Jeremie 还帮助运营一家名为sharpes minds的数据科学导师初创公司。你可以听下面的播客:

收听苹果谷歌Spotify

如果你走进一个房间,里面满是随机散落的物品,你会认为这些物品有多重要或多贵?

如果你走进同一个房间,却发现那些物品被精心地排列成一种非常特殊的配置,而这种配置不太可能是偶然发生的,那会怎么样?

这两个场景暗示了一些重要的东西:人类以反映我们价值观的方式塑造了我们的环境。在我的公寓里花 10 分钟散步,你可能会比花 30 分钟和我聊天更了解我重视什么,因为我试图用语言表达我的人生哲学。

这是一个非常重要的想法,因为事实证明,今天高级人工智能中最重要的挑战之一是找到向机器传达我们的价值观的方法。如果我们的环境隐含地编码了我们价值体系的一部分,那么我们也许能够教会机器去观察它,并且在我们不必明确表达它们的情况下学习我们的偏好。

利用从人类居住环境的状态中获取人类价值的想法最初是由伯克利博士和即将上任的 DeepMind 研究员 Rohin Shah 共同撰写的一篇论文提出的。Rohin 在过去的几年里一直致力于人工智能安全,并发表了广泛阅读的人工智能联盟时事通讯——他非常友好地加入了我们这一集的“走向数据科学”播客,在这里我们讨论了他的人工智能安全方法,以及他对高级人工智能系统风险缓解策略的想法。

以下是我们谈话中我最喜欢的一些带回家的东西:

  • 像许多人一样,Rohin 在一定程度上是通过接触有效利他主义社区的成员来推动人工智能联盟和人工智能安全工作的。有效利他主义是一场哲学运动,其重点是确定人们如何通过慈善捐赠或职业生涯对世界产生最大的积极影响。它专注于问这样的问题:我能做什么样的举动,才能最大化我对世界贡献的预期价值?对于 Rohin 来说,强大的人工智能系统在未来可能造成的伤害——以及这些系统如果安全开发可能带来的好处——使人工智能对齐变得很有吸引力。
  • Rohin 讨论了高级 AI 系统的两种重要的潜在故障模式,它们已经以不同的形式出现在当前的系统中。
  • 首先,他强调了不良归纳的风险:人工智能从它们的训练数据中学到了错误的教训,导致它们以人类可能没有预料到或不想要的方式进行归纳。作为一个例子,他引用了对 OpenAI 的 GPT-3 模型的最初关注,当一名开发人员用一个无意义的问题提示该模型时(比如,“一个 woolrop 中有多少 glubuxes?”).GPT-3 号没有“诚实地”回答这个问题,而是说了一些类似“我不知道——我不熟悉这些词”的话,试图用最佳猜测来回答,比如“一个 woolrop 中有 3 个 glubuxes。”你可能会说这实际上是一个不错的概括:GPT-3 的回答基本上就像一个参加考试的学生,他想通过纯粹基于问题的上下文进行猜测来隐藏他们不知道问题答案的事实。但是,如果我们希望建立一个诚实的语言模型——一个在适当的时候承认自己无知的模型——那么未经微调的 GPT-3 似乎无法通过测试。随着人工智能系统变得更加强大,这种行为可能会变得更加有害,因此 Rohin 认为这值得关注。
  • 其次,Rohin 讨论了向人工智能传达人类偏好的挑战。这是一个困难的问题:大多数人实际上不知道他们想要从生活中得到什么,甚至更没有能力与其他人交流这些愿望和价值观——更不用说与机器交流了,因为机器目前在推理方面缺乏上下文意识和灵活性。这就是 Rohin 教授机器从环境中推断人类偏好的工作的用武之地:他认为这种策略显示了作为人类偏好数据的额外来源的前景,机器可以用它来解读人类的价值观,而不需要我们能够明确地表达它们。我们讨论了这种策略的许多有趣的优点和缺点。

你可以在这里的 Twitter 上关注罗欣,在这里注册他的人工智能校准简讯,或者在这里的 Twitter 上关注我。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

章节:

  • 0:00 介绍
  • 有效的利他主义
  • 6:50 Rohin 对 AI 安全工作的介绍
  • 11:18 为什么 AI 风险如此严重
  • 18:33 育儿类比
  • 22:15 统计学习理论
  • 25:09 什么是偏好学习?
  • 32:23 应用到更高的抽象层次
  • 34:45 揭示偏好和世界状态
  • 36:26 打碎花瓶的比喻
  • 时间范围规则
  • 49:03 总结

下面是第二季第四集的脚本:

Jeremie (00:00):
嗨,大家好。欢迎来到“走向数据科学”播客的另一集。我叫 Jeremie,除了主持播客之外,我还是 SharpestMinds 数据科学导师项目的团队成员。我对今天的节目非常兴奋,因为我已经想了很久让今天的嘉宾上播客了。我很高兴我们终于实现了。

Jeremie (00:16):
他现在正处于从伯克利毕业的过渡期。他在人类兼容人工智能中心工作,他将过渡到 DeepMind,在那里他将做一些校准工作。他的名字是罗欣·沙阿。此外,除了是人工智能和人工智能比对方面非常多产的研究人员之外,他还是人工智能比对通讯的出版商,如果你想了解人工智能比对方面的一些公开问题和未决问题,这是一个非常非常好的资源。我真的建议去看看。

Jeremie (00:47):
我们将谈论一大堆不同的事情,包括人工智能的哲学、机器学习和人工智能对齐的哲学、实现它的方法、存在的一些挑战,我认为我们将探讨 Rohin 提出的最有趣的提议之一,这是一个关于从环境状态中提取人类偏好的想法。所以,基本上,这里的想法是,人类,通过他们的活动,已经将他们的偏好隐含地编码在他们的环境中,我们做一大堆不同的事情,不同的行动,揭示了我们的偏好。如果我们能让人工智能观察这个世界,并根据这个世界的状态来推断出我们的偏好,那就太好了。这可能是一个伟大的方式来引导人工智能对齐的努力。

Jeremie (01:30):
我们将深入讨论这个提议,以及一大堆其他事情。我真的很期待这一集,所以我希望你喜欢。事不宜迟,我们开始吧。

杰里米(01:39):
你好,非常感谢你参加我们的播客。

罗欣(01:41):
是的,谢谢你邀请我。我很兴奋。

耶雷米(01:44):
很高兴你能来。总的来说,您在校准领域做了很多有趣的事情。但是,在我们解决一些更技术性的问题之前,有一个观察,我认为任何花时间从事比对工作或与比对研究人员交谈的人最终都会在某个点上做出结论,即该领域的绝大多数人似乎来自有效利他主义社区。我很想听听你的看法,第一,什么是有效的利他主义社区,什么是有效的利他主义,第二,为什么你认为在 EA,有效的利他主义,人工智能联盟和人工智能安全研究之间有这种深刻的联系。

罗欣(02:20):
是的,当然。最重要的思想有效的利他主义,非常容易维护,不涉及细节,是无论金钱,时间,资源,无论你愿意无私地花费什么,你都应该尽力做好,而不是…你应该考虑一下。很难反驳这一点。我不认为我真的见过有人不同意这一点。

Rohin (02:56):
现在,在实践中,有效的利他主义运动有一大堆额外的前提,旨在支持这项技能,但更具争议性。我认为有效利他主义的最基本的理念是事业优先化。很多人会说,“好吧,我想要,比如说,非洲的干净水。我将为此而努力。”他们会考虑在非洲获得清洁水的不同方法,也许你可以尝试对人们已经获得的水进行消毒,或者你可以尝试建立一些新的处理厂,以便为每个人提供新鲜的,流动的饮用水。他们会考虑如何最好地实现他们提供干净水的目标。

Rohin (03:47):
人们很少会想,“好吧,我应该为非洲的人们提供干净的水,还是在美国反对种族主义?我应该努力做哪一件事?还是我的钱成?”有效利他主义的主要前提是,事实上,你可以做到这一点。事实上,原因之间有很大的不同,仔细想想,首先选择正确的原因会产生更大的影响。

罗欣(04:20):
它非常专注于这一点,认真对待想法,实际评估它们,判断它们是否真实,而不是它们听起来是否疯狂。它们听起来是否疯狂确实与它们是否真实有些关系,但它们不一定相同。我认为这也是为什么它是人工智能安全研究的温床。人工智能安全的 EA 案例,人工智能安全的工作,是人工智能有很好的机会在下个世纪极具影响力,比如说。

Rohin (05:00):
有一些论点值得商榷,但你似乎不能排除它。看起来至少有一定的可能性,如果我们不注意我们如何做到这一点,人工智能系统可能会“接管”,因为所有关于世界的重要决定都是由人工智能系统而不是人类做出的。一个可能的后果是人类灭绝。我稍后会讨论这个问题,我确定,但是-

耶雷米(05:36):
所以【相声 00:05:37】—

rohin(05:37):
【cross talk 00:05:37】相信这个论点,然后它就变得极其重要和有影响力。这听起来很疯狂,但对我来说,EA 的优势之一是它将听起来疯狂的东西与真实的东西分开。

Jeremie (05:52):
看起来,实际上,重点是有一个额外的缺失步骤,许多人在决定贡献什么事业、做什么工作、花什么时间时没有考虑到这个步骤,这就是“哪些领域会给我的时间带来巨大的回报?”

罗欣(06:09):
是的,没错。

Jeremie (06:12):
我真的能回想起我与人们关于慈善事业的大部分对话,这些对话通常都集中在诸如慈善机构的管理费是多少之类的问题上。哦,我想把我所有的钱都捐给这个事业,而不是问一个更基本的问题,从造福每个人或造福人类的角度来看,这个事业真的会带来最好的投资回报吗?有趣的是,这种思维,一种更加第一原则的方法,将许多人引向人工智能校准和人工智能安全领域。如你所说,这是有道理的,你得到了这种超高风险高回报的配置文件。

Jeremie (06:50):
是什么吸引了你,例如,人工智能联盟,特别是人工智能安全工作,而不是其他任何生物恐怖主义,我可以想象所有可能发生在我们身上的可怕事情,但为什么特别是人工智能联盟?

罗欣(07:05):
是的,所以我的故事有点奇怪。这可能是一个经典的人工智能故事,因为它被非常怪异的论点所说服。2014 年进入有效利他。我大概在一年内听到了关于人工智能风险的争论。我被他们深深地说服了。我就是没买。

Rohin (07:37):
所以,直到 2017 年,我基本上没有怎么接触 AI 安全。我也不相信,基本上,有一个伦理学领域叫做人口伦理学,它试图解决这样一个问题,当不同的世界有不同的人口时,你如何比较它们有多好?我们不需要深入细节,但这是一个非常令人困惑的领域。很多不可能的结果表明,你可能想要这六个非常直观的属性,但是,不,你不可能同时拥有它们,就像这样。所以你是[相声 00:08:21]-

耶雷米(08:20):
这里的想法是,一个有 100 个体面快乐的人的世界比一个有 1000 个体面快乐的人的世界更好吗?是那种计算吗?

罗欣(08:31):
是的。这是我要处理的问题的一个例子。

Rohin (08:35):
所以,不管怎么说,2017 年夏天我一直在思考这个问题。最终,我想,“好吧,我想我应该给它一个合理的权重,”当然不是确定性,而是合理的权重,认为更多快乐的人实际上意味着一个更好的世界,即使他们是在未来。一旦你有了一个相当大的可能性,确保未来继续存在并拥有幸福的人就变得极其重要,因为它与现在如此相关。

Rohin (09:21):
所以,我想做一些更面向未来的事情,我在计算机科学和数学方面有很多技能,基本上,你想在人工智能校准方面工作的一切。我仍然不太相信人工智能风险,但我想,“好吧,一群聪明人已经考虑过这个问题,也许我应该研究一段时间,看看它是否有意义。”这就是导致我实际上改变的原因,一年后,我实际上开始相信这些论点。

耶雷米(09:57):
太有意思了。

罗欣(09:58):
我也看到了不同的论点。

Jeremie (10:00):
你被……比最初的争论本身更容易被这个问题吸引的人的素质所引导吗?你还记得当你在做这个东西的时候,你会说,“嗯,等一下。这其实是真的。”我现在明白了为什么尼克·博斯特罗姆,也许还有埃利泽·尤德科夫斯基,以及当时谈论这个话题的其他人说得有道理了。

罗欣(10:21):
我从来没有真正的啊哈时刻。我记得,在某一点上,我就像,“我想我现在相信这些论点,”但它不像我…我想我现在相信人工智能风险是实质性的和真实的。我不能指出一个具体的时间点,是的,现在我相信了。有一天,我正在思考这个问题,注意到,“哦,是的。我以前不相信这个。现在我知道了。”

耶雷米(10:52):
太有意思了。看起来在阅读超智能的人和阅读较少错误的人之间存在分歧,他们对这个问题感到非常兴奋,并且立刻感到非常害怕,因为,不管出于什么原因,他们天生就是这样的。然后是像你一样的人。这就像一个缓慢的燃烧,你慢慢地进入其中。我想这是问题的一部分,如果需要很长时间才能让人们认为这是一件非常重要的事情,那几乎是阐明问题的一部分。

耶雷米(11:18):
当你试图向人们解释为什么人工智能风险如此严重时,你有什么策略吗?为什么你认为可能对你有作用的概率是不平凡的,以加速这个过程?

罗欣(11:32):
是的,我应该指出,我仍然……例如,我对《超级智能》中的论点不是很满意。我要说的是,对我来说,激励它的是略微不同的论点,仍然相当强调超智能的东西。

耶雷米(11:50):
顺便说一下,我想很多人都没有听说过超智能。

罗欣(11:54):
哦,是的。

耶雷米(11:55):
如果你想讨论你提出的任何论点,也请随意提供背景资料。

Rohin (12:00):
是的,也许我会谈谈我个人喜欢的论点,因为我可以更好地解释它们。但是,就上下文而言,《超级智能》是牛津大学教授尼克·博斯特罗姆写的一本书。它于 2014 年出版,是第一篇[听不清 00:12:19]论述为什么人工智能风险是可能发生的事情,为什么我们应该认为它可能是合理的,什么解决方案看起来像是应该调查的,等等。

Rohin (12:33):
然后,就我个人而言,我将给出的论点是…所以,首先,我们将[听不清 00:12:45]作为一个前提,我们建立智能的人工智能系统,比如说,像人类一样智能。我们可以以后再谈,但那完全是另外一个话题了。我只想说,我认为这不太可能……我认为[听不清 00:13:03]在下个世纪发生的可能性相当大。但是,现在,把它当作一个假设。

罗欣(13:10):
智慧意味着你可以适应新的情况,当你面对新的情况时,你会了解它,然后做一些事情,这些事情是连贯的。有道理。我举的一个例子是 GPT-3 的一个具体例子,在这个例子中,我们甚至可以看到当前的神经网络。我相信观众会熟悉 GPT-3…听众,而不是观众。但如果不是,GPT-3 是 OpenAI 最近开发并发布的[听不清 00:13:47]语言一代[听不清 00:13:48]。

罗欣(13:51):
我想我喜欢《邮报》上给 GPT-3 做图灵测试的一个例子。GPT-3 的背景是一堆问题和答案。GPT-3 会提出一个问题,一个硬币里有多少硬币。这些都是废话,你没有听错。GPT-3,从某种意义上说,这超出了它的训练分布。据推测,它从未在其训练语料库中见过这句话。它可能从未见过 bonk 和 quoit 这两个词。这是实际的分布转移,你依赖于某种分布的一般化。

罗欣(14:43):
尽管如此,我认为我们都可以预测 GPT-3 不会输出一些随机的字符串。它可能会说些明智的话。事实上,它说的是,“你知道,一个杯子里有三块糖。”为什么是三个?我不知道。但是,你知道,在某种意义上这是明智的。它产生了一个听起来像英语的答案。

耶雷米(15:10):
在某种程度上,我们都有过这样的经历,如果我们写考试或其他什么,我们会被问及一个硬币里有多少颗糖,我们没有学习,嘿,一个硬币里有三颗糖。我们走吧。

罗欣(15:18):
完全正确,对吗?在某种意义上,GPT-3 确实概括了,它概括了一个学生参加考试的方式。在最初的帖子中,这被视为 GPT-3 实际上不合理的证据,因为它不知道如何说,“这个问题是无意义的。”

罗欣(15:39):
但是接下来的一个帖子是这样的,“实际上,你完全可以让 GPT-3 这样做!”如果你告诉 GPT-3…如果在上下文中,你说每当它看到一个无意义的问题,人工智能回应,“哟,是真实的。”然后,当被问到一个硬币里有多少颗糖时?它说,“哟,真实一点。”所以你知道它有能力辨别这是废话,它只是以一种更像一个应试者而不像一个谈话中的人的方式进行概括。我们提前知道了吗?不,我们没有。为了弄清楚这一点,我们不得不实际运行 GPT 3 号。

罗欣(16:23):
我认为人工智能的风险基本上是这样的,但如果你的人工智能系统是人类水平的智能,它肯定会被部署在新的领域,在新的情况下,我们以前没有见过。我们真的没有令人信服的理由相信它会继续做我们训练它做的事情,而不是别的事情。在 GPT 3 号,我们训练它做什么?好吧,在训练数据集上,至少,我们训练它做人类在那种情况下会写的任何事情。

罗欣(17:05):
当你看到一个杯子里有三颗糖……对不起,一个杯子里有几颗糖?在那种情况下人类会怎么做?我不知道。这并没有很好的定义,GPT 3 号做了一些明智的事情。我不认为你可以合理地说它没有做我们训练它做的事情,它只是做了一些连贯的事情。同样,如果你有人类水平或更高智能的人工智能系统,对世界采取超级有影响力的行动,并且它们被置于这些新的情况下,在这些情况下,它们将如何概括并不是事实,那么它们可能会采取对世界有很大影响的行动,而这不是我们想要的。

罗欣(17:49):
然后,也许是直觉【听不清 00:17:52】为什么这可能非常非常糟糕,就像人类灭绝级别的糟糕。一个特别的分布变化是,你从人类比人工智能拥有更多权力并可以关闭人工智能的训练环境,到人工智能足够智能并被广泛部署,但没有人可以…或者说人类作为一个整体不能关闭它的环境。在那种情况下,那是一种新的情况。AI 以前从未有过这种能力。它会以某种方式使用它吗……它会以某种不同于我们在训练中预期的方式进行概括吗?我们真的没有理由说不,它不会那样做。

耶雷米(18:33):
你认为这和养育孩子有相似之处吗?我只是在想人类的代际繁衍,我们的祖先在 17 世纪,至少在西方,我肯定会对我们今天处理性的方式,我们与长辈沟通的方式,我们管理机构的方式等等,我们所有的等级制度都完全不同。而且,在许多方面,我们[听不清 00:19:00]是中世纪或文艺复兴早期的道德框架。

耶雷米(19:07):
我想这里有所不同,至少我们仍然运行在相同的基础硬件上,或者非常相似的东西。也许这确保了最低水平的一致性,但是这种类比在某种程度上是否会破裂呢?

罗欣(19:18):
我认为这是一个很好的直觉。这个类比在某些方面是不成立的,比如,嗯…这个类比不太成立,因为这些原因,我会说稍微减轻一点重量。一个是,在抚养孩子的过程中,你对孩子有一定的影响力,但是你不能做一个完整的训练过程,在这个过程中,你要给他们一个梯度,让他们做每一步动作。你可能希望,鉴于你可以在人工智能系统上有更多的选择压力,你将能够避免这个问题。

Rohin (20:00):
但是,是的,我认为这就是我所指的基本动力。你对这些代理有一定的影响力,但是那些代理遇到新的情况,他们在这些情况下做一些事情,你没有提前考虑这些情况,你没有训练他们做正确的事情。

耶雷米(20:23):
我完全同意人工智能风险的观点,这是非常重大的风险。赌注非常高。当谈到你认为最有希望的解决方案或策略时,你自己是专业的,显然,在一个类别中,每个人都必须是,在对齐问题域中的一个子空间中。你决定关注的领域是什么?为什么你认为在这一点上最值得关注?

罗欣(20:50):
到目前为止,我告诉你的故事是一个概括。主要的问题是我们不知道如何概括,而且,很可能,你会得到一心一意追求权力的人工智能系统,这与超级智能的故事相似,可能会导致人类灭绝。基本机制是糟糕的概括,或者说是像你的能力那样的概括。你做了一些连贯且影响深远的事情,但是相对于人类想要的,你试图做的事情并不一般化。

Rohin (21:31):
我最感兴趣的许多事情在某种程度上都与泛化有关。我感兴趣的一件事是,我们能从经验上更好地理解神经网络是如何进行归纳的吗?对此我们能说些什么吗?有很多理论试图解释为什么神经网络有如此好的泛化能力。这不能用统计学习理论来解释,因为神经网络可以记忆随机噪声,但尽管如此,当标签不是随机噪声时,它似乎可以很好地概括。

Jeremie (22:15):
你介意解释一下统计学习理论作为参考吗?实际上,我不确定我是否能理解这种联系。

罗欣(22:23):
统计学习理论就像机器学习理论的一个分支,试图做几件事。但是,除了其他事情之外,尝试证明如果我们用这样那样的训练属性在这样那样的训练数据上训练一个机器学习模型,那么我们知道它将以这样那样的方式进行推广,并且它证明了关于这一点的定理。

Rohin (22:50):
重要的是,目前大多数方法都专注于对您的模型、您的假设类别做出假设。这些假设通常排除了对任意大小的数据集进行过度拟合的能力,因为如果可以的话,那么你真的不能说任何关于一般化的东西。但事实是神经网络真的可以适应任何数据集。他们可以记住字面上随机噪音的标签。所以,这些假设不适用于神经网络。

罗欣(23:28):
我感到兴奋的事情是,我们可以谈论数据集的假设,而不仅仅是模型吗?如果我们考虑数据集上的假设和模型上的假设,那么我们能说说神经网络是如何进行归纳的吗?这就像是一个超级模糊不清的希望,我还没有真正开始努力,据我所知,其他人也没有。

Rohin (23:55):
关于神经网络有太多的经验性的东西让我非常困惑,比如深度双重下降。我不明白。这是一种经验现象。不知道的可以去查一下。它可能不值得我去探究,只是太令人困惑了。不知道为什么会这样。对我来说毫无意义。我想知道为什么,我认为如果我们理解了这样的事情,我们也许能够开始陈述神经网络如何倾向于概括,也许这可以转化为我们可以说的关于安全的事情。

耶雷米(24:27):
这很有趣,因为泛化的故事似乎是问题的一个组成部分,当然,然后是另一个组成部分,我的意思是,有一些重叠,但看起来它们确实有不同的组成部分。告诉机器人类的偏好是一个挑战,我们告诉彼此我们想要从生活中得到什么的能力已经非常有限了,我的意思是,至少我个人认为这是一个有点不和谐的前景,不仅要表达我们的偏好,还要量化它们,并将其转化为某种损失函数,然后输入到模型中。你在这方面做了很多有趣的工作。

耶雷米(25:09):
事实上,我想谈谈你的一篇论文。我们在开始录音前讨论过这个问题,我很高兴听到这也是你认为最有趣的一个。我们观点一致,至少在这一点上。这是一个想法……嗯,论文的标题是世界状态中隐含的偏好。我想,首先,我想问一个问题来做个铺垫。什么是偏好学习?那是什么概念?

罗欣(25:34):
这实际上是我接下来要说的让我感到兴奋的事情。

耶雷米(25:38):
哦,太好了。

罗欣(25:39):
我已经谈到了概括,但是在你概括之前,你首先要训练正确的事情。这似乎是人工智能系统的一个很好的起点。如果你没有,你可能就完了。关于如何通过编写一个程序或一个方程来指定你想要的东西,这实际上是非常典型的,已经洒了很多墨水,正如你所知,深度强化学习或任何深度学习系统是如何工作的。但它通常与深度强化学习联系在一起。

罗欣(26:21):
优先学习的理念是,你不用写下一个等式来说明你想要什么,而是用一些更简单的方法来说明。例如,你可以在一个强化环境中观察两个轨迹,你可以观察代理采取的两个行为,你可以说,“啊,是的,左边那个。那个更好。”这给了代理一些关于它应该做什么的反馈。它不是试图写下一个方程,在每一种可能的情况下捕捉理想的行为。只是说,这两个里面,哪个更好?你可能会认为这对人类来说更容易做到,也更有可能是正确的。

Rohin (27:08):
这是一个偏好学习的领域,我认为这是一个我们如何为人类设计向人工智能系统提供反馈的机制的领域,这样我们就可以提供反馈,激励我们真正想要的行为,并且我们不会像在奖励功能方面那样犯很多错误。

耶雷米(27:34):
所以,我发现在这方面真正令人兴奋的是,人类表达的欲望和透露的欲望,或者表达的意图和透露的意图之间有这种众所周知的差异。我会说今天要健身三个小时,要做一堆编码,下个月要吃一堆纯素餐。如果你下个月来看我,我将不会做所有这些事情,我几乎不会做所有这些事情。问题是,哪个我是我?我是那个说嘿,我想成为那个人的有抱负的自己吗?或者我是那个一直坐在沙发上看网飞的傻瓜?

耶雷米(28:16):
这似乎真的解决了问题,因为如果探针显示偏好,无论是好是坏,我想这也可能是一种失败模式。你认为这种方法有价值吗?

罗欣(28:29):
是的,我认为你想同时使用两种信息来源,而不是其中任何一种。实际上,让我后退一步,区分你可能尝试做的两件不同的事情。有一件事,你试图了解人类重视什么,这是你正在谈论的那种事情,还有另一种框架,你只是想,“我想让我的人工智能系统做这样那样的任务,我想训练它这样做,但我不能写下这项任务的奖励函数。”

Rohin (29:01):
老实说,我实际上对后者更感兴趣,但前者也是我花了很多时间研究的,我对此感到兴奋。现在,我们谈论的是前者。

耶雷米(29:13):
我可以问一个天真的问题吗?我想我知道区别是什么,但我只是想让你明确地解决它。那两件事有什么区别?

罗欣(29:24):
一件事是,我可能想让我的人工智能系统用吸尘器打扫我的地板,或者其他什么。用真空吸尘器清扫我的地板的任务并不是仅仅由那句话来明确说明的。任何有 Roomba 的人都会告诉你 Roomba 超级笨的故事。其中一些只是 Roomba 不够智能,但也有一些是任务不是非常明确。

Rohin (29:57):
代理人应该在圣诞树下用吸尘器清扫吗?那里有一堆针,可能会破坏他们的吸尘器。谁知道呢。如果地板上有一些随机闪亮的按钮,应该用真空吸尘器清理还是放在一边?因为也许那个按钮很重要。什么样的东西,猫应该被吸尘?这只猫的毛很多,到处都是。如果你给猫吸尘,看起来会让你的房子更干净。

罗欣(30:31):
这里有很多模糊之处。我不会真的说这些是人类价值观,就像教你的 Roomba 如何吸尘似乎和教 Roomba 人类价值观不是一回事。首先,你真的不能在这里谈论太多暴露的偏好,因为我不经常用吸尘器打扫我的房子。如果一个人工智能系统要排队清空,我可能会让它更频繁地清空。

耶雷米(31:06):
你会说这是人类偏好的狭隘应用吗?狭义人工智能和 AGI 之间的区别似乎映射到了这一点上。

罗欣(31:16):
是的,我想我同意这一点。我会说,但在这个意义上,一切都是狭隘的人工智能。你只能得到变得越来越普遍的狭义人工智能,在某种程度上,我们决定不再称它为狭义人工智能,而开始称它为 AGI,因为它已经变得如此广泛。

Rohin (31:34):
我喜欢你的想法,你可以从一些可以应用于当今系统的东西开始,然后对其进行扩展。它变得越来越有能力,越来越通用,但它总是相同的技术。最终,我们用它创造的系统,我们会给它们贴上 AGI 或人类智能或超级智能的标签。同样的技术,同样的原理。这就是为什么我对这个问题的框架更感兴趣,而不是人类价值垃圾邮件。

罗欣(32:07):
当你进入更一般的系统,它与人类的价值观融合在一起。一旦你有了设计政府政策或其他东西的人工智能系统,无论你给它们什么样的反馈,它都会更好地教会它们人类的价值观。

耶雷米(32:23):
是的,我想,希望我们在越来越高的抽象层次上开始这样做,就像你说的那样。从某种意义上来说,我们向上填充卷积滤波器。

罗欣(32:34):
是的,正是如此。你问了一个关于表露偏好与口头偏好或表达偏好的问题。我想,是的,这是一个重要的区别。我绝对希望我们提出的任何方法都不依赖于一个或另一个,而是同时使用两者,这将会有冲突,我最希望的是,我们可以让人工智能系统搁置冲突,并根据其中任何一个集来做非常好的事情。也许,你必须有一些冲突解决机制,但是在某种意义上,人类已经必须这么做了。我们似乎有可能做这件事。

罗欣(33:28):
我认为这是一个非常好的方面,你不必在每种可能的情况下都致力于寻找行为。我们只是不知道这些。老实说,我们的价值观还不够明确,这是不对的。当我们遇到新情况时,我们的价值观会不断更新。现在,我们谈论民主,一人一票。如果有一天,在超人类主义的未来,如果有一天复制人成为可能,我想我们很快就不再想要一人一票了。因为如果你足够富有,你可以花钱让任何人当选。

耶雷米(34:19):
是啊。或者,我想,仅仅是在有限的关于大脑状态的更好的信息中,我们可以说,当然,这个政策让大多数人更快乐,但是它让人们更不快乐,我的意思是,看看那个可怕的多巴胺循环。这些人真的受到了很大的打击,你唤醒了他们的反应。

罗欣(34:37):
对,对,你肯定可以为社会福利做更好的优化,也许你不希望只有一人一票。

耶雷米(34:45):
好的,现在,我想这让我们回到了世界状态中隐含的偏好,大概有一些关于世界结构的事情透露了我们的偏好,我想这主要是透露了偏好,对吗?

罗欣(34:57):
是的。

耶雷米(34:57):
我们实际上做了什么。

罗欣(34:58):
是的,这绝对是一个显示偏好的方法。我认为这一点的一个重要方面是人们将…我认为我对此特别兴奋的原因之一,我想说的是作为前奏,这不是试图做困难的事情。当人们想到价值学习时,他们会想如果无人驾驶汽车可以在撞到两名乘客或杀死司机之间做出选择,它应该怎么做?这些都是艰难的伦理问题。我对它们不太感兴趣。我想从我们能否得到一个可靠地知道它不应该杀死人类的人工智能系统开始。如果有两个选择,是的…

罗欣(35:50):
总之,我们都同意或几乎都同意的基本内容,所以我认为观察世界的状况是了解这一点的好方法,这里的基本直觉是,我们已经在这个世界上生活了很长时间。我们有偏好,我们一直在重新安排世界,以适应我们希望世界成为的样子。因此,你可以颠倒这个过程,找出我们可能想要的东西。

Rohin (36:26):
有一个很好的玩具例子可以说明这一点。假设有一个房间,在房间的中间有一个易碎的花瓶。花瓶一旦被打破,就再也无法修复了。我们假设人工智能知道这一点。我们将假设人工智能知道所有的经验事实。它知道世界是如何运作的,它知道人类可以采取什么行动,它知道人类可以采取什么行动,它知道它自己可以采取什么行动,它知道世界的可能状态,但它不知道关于[听不清 00:36:58]功能的任何事情,它相当于人类的价值观。

罗欣(37:02):
它知道经验事实。它知道,这个花瓶,一旦打破,就无法修复。我们将把胶水之类的东西放在一边。然后它看着它看到的事实,它被部署在这个房间里,它看到它的人类,我称之为爱丽丝,在房间里,花瓶没有被打碎。现在你可以提出假设性的问题,比如好吧,如果爱丽丝想打破花瓶,我会看到什么?嗯,我会看到一个破碎的花瓶。如果爱丽丝不在乎花瓶,我还能指望什么呢?嗯,可能,在某些时候,最有效的方法是在房间里走来走去,同时打翻花瓶。所以,很可能在那种情况下,我也会看到打碎的花瓶。

罗欣(37:58):
如果爱丽丝不希望花瓶破碎,或者积极地希望花瓶不被打碎,我会期望看到什么?在这种情况下,我实际上看到了一个完整的花瓶,可能。因为我实际上看到了一个未破碎的花瓶,这告诉我,在这三种情况中,只有最后一种似乎与我的观察一致。所以,很可能,爱丽丝不想打破花瓶。你可以通过观察世界的状态,看到花瓶没有碎,来推断爱丽丝不想打碎花瓶的事实。

耶雷米(38:33):
这似乎与热力学第二定律有很深的联系,宇宙有很多方法可以解决花瓶破碎的情况,但是没有花瓶破碎的事实是一个巨大的信息。

罗欣(38:52):
对,完全正确。

Jeremie (38:57):
基本上,到了[相声 00:38:59]-

罗欣(38:58):
我想我没有什么要补充的了。

耶雷米(38:59):
这让我感到震惊,这是我的物理学家本能,但就世界看起来与我们对纯热力学随机性的预期有所不同而言,这里的假设是这些差异来自人类的偏好。这是描述…的公平方式吗

罗欣(39:17):
是的,没错。

耶雷米(39:19):
那这是否意味着某种故障模式呢?因为我想我们在我们的环境中编码信息,我想这是[听不清 00:39:25]显示偏好的事情,但含蓄地说,我已经把我的大脑状态硬编码到我的公寓里,每件事情的安排,任何厌恶女人,任何种族主义,任何恋足癖,所有可能是或可能不是我个性的一部分的怪异怪癖都含蓄地编码在房间里。这是应用这种技术的部分风险吗?

罗欣(39:54):
是的,所以,从理论上来说,如果你[听不清 00:39:59]这种方法,它会…它会得到所有显示的偏好吗?还有,嗯,我不知道它得到了一切。但大致来说,它得到了你透露的偏好。我相信有些事情是它不明白的。有时候,你只是不喜欢你表露出来的偏好,你认为它们应该是不同的。

罗欣(40:27):
你有一个明显的偏好,许多人都有一个明显的偏好,就是拖延,他们可能实际上并不赞同,他们不希望他们的人工智能系统给他们越来越多令人上瘾的材料,以便他们可以更好地拖延,这似乎是可能发生的事情。我将不得不更加努力地思考这到底是如何发生的,但我可以相信这将是一种影响。

Rohin (41:03):
同样,我到目前为止解释的技术似乎是世界上只有一个人,如果有多个人类,事情会变得复杂得多,我到目前为止一直忽略这种情况。

耶雷米(41:20):
这是你离开地面所需要的,对吗?

罗欣(41:22):
是的。

耶雷米(41:26):
在这种情况下,我想至少还有另一种风险模式,就是说,在这个花瓶的例子中,我们假设这个人实际上并不在乎这个花瓶,只是碰巧,在她的演示中,他避开了这个花瓶。有没有这样的风险,我想这是机器学习中的一个风险,听起来就像一个额外的分布抽样的例子,就像你会学到的-

罗欣(41:57):
是的。

耶雷米(41:57):
好的。

罗欣(41:58):
对,没错。如果花瓶被放在一个不显眼的地方,实际上爱丽丝在房间里走动时不太可能打碎花瓶,我们实际上把它写在纸上,我们表明在那种环境下,你实际上不会学到任何关于花瓶的重要东西。你就像,“呃,她可能不想把它弄坏。”你推断出她并不十分渴望花瓶被打碎,但是你没有推断出比这更强烈的东西。你不确定打碎花瓶是件坏事还是件坏事,是的,这并不重要。

耶肋米亚(42:44):
有意思。

罗欣(42:45):
如果打碎花瓶可以提高效率,那么你推断并观察到花瓶没有被打碎,然后你推断打碎花瓶是不好的。仍然有可能的是,人类,我们不是完美的最佳人,我们可能不会提高效率,所以我们可能会绕过花瓶,即使去花瓶会更快,即使我们不在乎花瓶。是的,这个方法会做出错误的推断。总的来说,在偏好学习中,你假设人类做人类做的事情来反映他们想要的,这两者之间有很大的矛盾。并不总是如此。

耶雷米(43:37):
没错,我想有时候纯粹是因为愚蠢。我们可能想要一件东西,只是不知道如何让它发生。

罗欣(43:45):
是的,没错。这在偏好学习中是一个巨大的挑战,事实上,包括我在内的许多人都试图解决这个问题。但我不会说,在把愚蠢和你真正想要的东西分开方面,已经取得了巨大的进步。

Jeremie (44:10):
我认为如果我们这样做,我们最终会解决很多其他问题[相声 00:44:12]。实际上,关于论文,我还有一个问题想问你。我认为,时间范围的规则,或者说时间范围在论文中的规则,真的很有趣,因为机器人或人工智能对人类对这个动作的时间范围有一定的假设,如果对时间范围的改变有假设,你会开始看到不同的行为。我很想听你详细说明一下,并描述一下那个场景。

罗欣(44:43):
我认为我关于时间范围的主要观点是,如果你假设时间范围很短,那么状态没有完全优化的情况就更情有可原了,因为人类没有足够的时间将状态完全优化到对他们来说最佳的状态,所以你可以-

耶雷米(45:11):
也许我应该填补这个空白,我知道这有点模糊,但是从时间的角度来看,我想我们谈论的是人类从房间的一个地方到一个理想的终点需要的时间,对吗?[相声 00:45:24]

罗欣(45:23):
是的,这就像机器人出现之前,机器人假设人类已经在环境中活动的时间。在房间的情况下,它的机器人被部署,看到一个完整的花瓶,它就像,“啊,是的,人类已经在这个房间里走了一个小时,”或类似的事情。

耶雷米(45:40):
对,如果你在房间里走了整整一个小时,花瓶还在那里,你就可以认为这个花瓶可能非常重要。

罗欣(45:48):
对,正是这样。论文中的实际设置略有不同,但这是正确的直觉。是的,花瓶的例子不能很好地说明这个问题,但是想象一下,你正在用卡片建造一座房子。这是另一个例子,世界的状态真的很能说明你的偏好。纸牌屋是超级的,超级的不熵。可以推断出很多。

耶雷米(46:21):
是的,安排越具体,我想就越…这很有趣,因为这正是保护人类的挑战所在,这种方法几乎有一种哲学上的保守倾向,因为我们假设我们已经到了值得保护的地方,因为我们已经对自己进行了编码。 我们在环境中已经有了这么多好的东西,而且看起来我喜欢这个时间范围的东西是它背后的政治哲学,它几乎给了你一个刻度盘,你可以通过假设不同的时间范围从光谱的进步端调谐到保守端。 如果你认为我们刚刚来到这里,这是一张白纸,那么,嘿,我们可以尝试任何事情。相反,我们并不确定人类在这种环境中想要什么…

罗欣(47:12):
是的。

耶雷米(47:12):
对吗?是啊。

罗欣(47:13):
没错,我从来没有这样想过,但是你说得对。基本上就是这样。另一种思考方式是,我实际上到了这一步,到了写这篇论文的地步,问我自己为什么我们给无为行动以特权?我们会说安全的行动是什么都不做。为什么?只是一个动作。这是一个答案,我们已经优化了环境,随机行动是可能的,所以…当前状态在我们的偏好排名中很高。随机的行为把我们从那个状态带到另一个随机的状态,所以可能期望我们的排名变低,而什么都不做的行为保持了它,所以它是好的。时间跨度越长,你就越想默认什么都不做。

耶雷米(48:07):
是的,是的,我记得在报纸上看到过,实际上,这几乎是直觉的衍生,当你看到它像那样摆放时,它是如此美丽。

罗欣(48:15):
我知道,所以很好。

耶雷米(48:18):
是的,是的。在某种程度上,这让我想到不同政治派别的人之间的许多争论会变得容易得多,如果我们应用这样的玩具模型,你可以说,嗯,嘿,对保守派来说是有价值的。进步是有价值的。不管怎样,我们最终都会陷入反面乌托邦,这里有一个参数,我们可以调整它来看看反面乌托邦的事情是如何发展的,这取决于我们对事物的重视程度。

耶雷米(48:43):
是的,不管怎样,我喜欢这项工作,我认为这是……不管怎样,对于任何对哲学、道德哲学和人工智能的交叉感兴趣的人来说,这是一个非常酷的工作。

罗欣(48:58):
好的,谢谢。我喜欢它的原因基本相同。

耶雷米(49:03):
甜。嗯,我很高兴我们有兼容的[听不清 00:49:06],然后。太棒了。嗯,我想我们已经谈了很多,但是你还有什么想谈的吗?我想确定的一件事是参考您发布的校准时事通讯。我认为每个人都应该检查一下,特别是如果你想进入这个领域。Rohin 发布了这个惊人的时事通讯,无论如何,我们会在播客附带的博客上链接到它。

杰雷米(49:30):
你有什么社交媒体链接或类似的东西想分享吗?

罗欣(49:35):
我认为联盟时事通讯是让我了解当前想法的最佳途径。如果你是这个领域的新手,我可能会推荐其他东西。我喜欢的更具介绍性的具体排名…它不完全是介绍性的,而是更永恒的材料,在对齐论坛上有一系列我写的博客帖子,称为价值学习序列。我喜欢这是一个很好的介绍,在那个论坛上还有另外两个推荐的序列,我也推荐,我也认为非常棒。

罗欣(50:21):
在社交媒体方面,我有一个 Twitter。它是@RohinMShah,但大多数情况下,它只是发送校准简讯链接。人们也可以随时给我发电子邮件。我的电子邮件在我的网站上,不能保证我会给你回复,因为我确实收到了很多电子邮件,但我认为我的回复率相当高。

耶雷米(50:50):
是的,好吧,我可以在我这边证明这一点。感谢你抽出时间,真的很感激,我真的很期待把这个放出来,也祝 DeepMind 好运,因为你几天后就要去那里了,真的,对吗?

罗欣(51:04):
是的,我周一会去那里。又是两个工作日。

耶雷米(51:09):
好吧,是的,享受这个漫长的周末吧。

罗欣(51:13):
凉。谢了。

耶雷米(51:13):
太棒了,非常感谢,罗欣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值