社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

深度学习与社科数据分析 | Political Analysis

PoIiticaI理论志 • 1 年前 • 242 次点击  
编者荐语:

社会科学研究可能涉及对视觉信息的提取,传统的人工工作成本较高,容易出现疲劳和认知偏差,而计算机科学深度学习领域的卷积神经网络是减轻人工负担的便利工具。本文介绍了卷积神经网络的构建过程,使用该技术的实用建议,并通过一个案例分析展现了它的优势和面临的挑战。卷积神经网络作为一种视觉信息提取和分析的前沿工具,有望为社会科学领域需要开展图像分析工作的研究者提供帮助。




因公众号推送规则变更

点击标题下方蓝字 关注+星标 “Political理论志” 

不错过社会科学前沿精彩信息哦

具体操作如右 →



学会观察:卷积神经网络与社科数据分析

摘要

本文介绍了卷积神经网络在社会科学领域对视觉信息进行分类的功能、实施和挑战。这一工具可以帮助学者们更有效地完成对图像进行分类并从中提取信息的繁琐任务。通过对选票统计中的手写信息进行编码,说明了这一方法的实施和影响。论文不仅展示了卷积神经网络对学者和政策实践者的贡献,还介绍了该方法的实际挑战和局限性,并就如何解决这些问题提供了建议。

作者简介:

Michelle Torres 莱斯大学

Wouter van Atteveldt 休斯顿大学



文献来源

Torres, M., & Cantú, F. (2022). Learning to See: Convolutional Neural Networks for the Analysis of Social Science Data. Political Analysis, 30: 113-131.

本文作者(从左到右):Michelle Torres、Francisco Cantú



一、前言


过去,计算机遵循一组指令来处理视觉信息的能力有限。为搜索特定政治领导人的图片,可创建描述其身体特征(如鼻子形状、鼻眼距离和额头大小)的核对表。然而,若人物未面对镜头、戴墨镜或在不同光线下,这些指令就可能不足。计算机科学的新近发展模仿人类识别视觉模式来从图像中检索信息,通过多个实例,计算机将图像转换为像素值的矢量(vectors of pixel values),捕捉图像颜色、边缘、纹理等特征,使计算机能总结一般模式而无需特定规则,从而分类、识别特定物品,或将它们聚集成簇。


本文介绍的卷积神经网络(convolutional neural networks, CNNs)是处理视觉信息,特别是作为分析、编码和分类大规模图像集的可靠、有效的工具。本文以应用CNN模型对来自投票统计的手写信息进行编码为例,说明该方法的优势,解释CNN结构和功能,为希望使用它的研究人员提供指导。这一方法也具有局限性,特别是连接输入和模型输出的不透明性(opacity)Zeiler and Fergus 2014; Nguyen, Yosinski, and Clune 2015; Sabour, Frosst, and Hinton 2017),以及对大量优质的训练数据的依赖。因此,使用该模型必须建立透明的目标,避免对结果的事后解释,以及限制在原则上也可以利用人工完成的任务上(Lipton, 2016)。


本文首先介绍什么是CNN以及其中的各个阶段;其次,列出构建CNN的过程以及在使用该技术时的技巧和实用建议;第三,讨论CNN在某些测量和分类任务上的局限性;第四,通过一个识别手写数字的案例阐释其实用性;最后,提出在社会科学领域多使用视觉分析的方式。




二、CNNs入门


CNN模型接收输入(在本文中为图像),并为其各种特征分配“权重”(weights)加以区分。它有一个称为“架构(architecture)”的元素(elements)和组合结构(specifications),其核心是“卷积”(convolution)概念。


图1展示了CNN的基本架构,它由不同的层堆叠而成。卷积层(CONV)在图像的特征空间中寻找特定模式,激活层(ACT)池化层(POOL)分别执行数字运算以引入非线性和降低空间维度。最后,全连接(FC)层学习参数,帮助模型对图像进行准确分类。

图1


CNN的功能可分为三个阶段。第一阶段对图像进行预处理,确保所有图像都具有相同的像素面积和范围。第二阶段将图像解构为多个组件,每个组件代表一个特定的视觉特征,并降低数据的维度。最后一个阶段收集相关信息,将图像分类为可用的输出标签。本文以单色通道的手写数字图像作为示例,但步骤同样适用于彩色图像及其各自的三色通道。


图像预处理

首先将图像转换成计算机可读的格式,即把每幅图像表示为一个数字数组,其中每个条目表示一个特定的像素值。图1 左侧展示了如何将一幅13(高)×13(宽)像素的手写数字“1”图像转换成一个13×13 = 169个单位的矩阵,每个单位表示一个特定像素的光强度。如果是彩色图像,转换后会产生三个相同大小的矩阵,每个原色通道(红、绿、蓝)一个,其中每个单元的值代表相应颜色的强度。


优化用于 CNN 的图像需要确保所有文件具有相同的形状、大小和对比度范围。第一步是将所有图像转换成相同大小的正方形,从而优化卷积中涉及的线性代数计算(Rosebrock 2017)。三种最常见方法包括压扁图像的最大边、在最短边上添加黑色边框或居中裁剪。后一种方法是最常见的做法,因为它还能减少模型要处理的像素数量,从而加快学习速度。


我们还需要将所有图像缩放至相同的像素范围,防止模型偏向于处理大像素值的图像。常见的缩放方法是归一化,即用原始值除以最大可能的像素值255,将像素限制在[0,1]范围内。另一种缩放方法是居中,即用数据中像素值的标准差除以每个像素与平均像素值的差值。与归一化不同的是,居中化均值为0,方差为1。由此产生分析的核心单元——输入矩阵。由于CNN 会淡化图像边缘的特征,零填充(zero padding,即在输入矩阵中添加一圈0)将防止这一问题。


最后,将数据库中的所有图像分成四个子集:

(1) 一个适合模型的子集(训练集);

(2) 另一个用于评估其性能并允许调整参数的子集(验证集);

(3) 用于测试上一步中“最佳”模型性能的子集(测试集);

(4) 在训练和调整模型后进行标注的子集(目标集)。


训练数据用来学习与每个结果类别相对应的模式。验证和测试集帮助确定优化分类的参数,并检查模型预测的通用性。目标集包括来自未标记示例的数据,在训练阶段绝不使用。监督学习方法的全部意义在于训练和测试一个模型,帮助我们标注目标集的示例。


特征表示

当输入矩阵通过第一个CONV时,CNN的第二阶段开始。每个卷积层都包含一组较小的矩阵,称为filters,它们各自代表一个特定的视觉特征。第一层中的filter描述的是基本特征,如直线或对角线。随后的层以这些特征为基础,过渡到更复杂的特征,从线条到轮廓、形状和物体。CNN的层数越多,识别的图像特征就越复杂(Buduma and Locascio 2017; Qin et al. 2018)。Filter每次滑过输入矩阵的宽度和高度时,都会计算自身与相应图像子区域之间的点积,形成一个新矩阵,称为感受野(receptive field),表示filter与图像某一区域的“匹配”程度。


卷积需要研究人员定义三个超参数。首先,filter的尺寸(size)是其宽度和高度的乘积。例如,图1中的filter大小为3×3 = 9。小filter可以捕捉到细微的细节,但可能会将信息与噪声混合;大filter可以捕捉更大的细节,但特异性较低。其次,filter步长(stride)是一个整数,定义了filter在图像中滑动的像素数量。步长越小,卷积过程中保留的图像信息就越多最后,层深度(layer depth)定义了CONV中filter的数量,该参数设置的所有滤波器大小相同。


图2展示了卷积的工作原理,包括计算filter的点积和图像中每个等效像素空间(equivalent pixel space)的值。在本例中,filter条目与高亮显示图像区域输入之间的点积为2.2,步长为 3,向右滑动三步,再次计算点积。这一操作的结果称为特征图(feature map),卷积过程将创建与filter相同数量的特征图。

图2


ACT层对特征图进行非线性变换,然后再将其发送到下一个卷积层。非线性特性允许网络堆叠多个层,从图像中提取更多信息。它对输入执行的具体变换取决于神经元的激活函数,包括Sigmoid函数(Logistic函数的倒数)、Tahn函数(Sigmoid的线性变换)和ReLU函数(一种非饱和函数,保留原始正输入值并将所有负值转换为0)。图1采取了Tahn函数。


由于图像的尺寸可能很大,这一阶段的目标之一是在保留最相关信息的同时降低图像的维度。为此,建议在每个CONV→ACT序列之后加入POOL层(Rosebrock 2017)。POOL汇总信息的方式取决于它是保留最大值(max pooling)、最小值(min pooling)还是特定像素区域的平均值(mean pooling)。图1采用最大池化,保留矩阵中每个2×2像素区域的最大值。这样得到的矩阵概括了图像的属性,迫使神经网络更加关注某个特征是否适合图像,而不管该特征的位置如何。


第一层中的每个filter都要重复CONV→ACT→POOL序列,产生的特征图成为第二层CONV的输入。这一新层重复上述所有步骤,其filter在特征图中滑动,寻找更复杂的特征,如线条或边缘的组合。只要网络中有CONV,该过程就会重复多次。


学习

CNN的最后一个阶段使用最后一个CONV→ACT→POOL序列中提取的元素来预测图像的标签。在一组FC层之后是最后的ACT层,也称为输出层,用于生成预测的输出值。FC层的每个神经元接收输入,将其转换,并向另一个FC层或ACT层的神经元发送信号。信号的强度取决于发射和接收神经元之间的权重。正权重放大信号,突出其对输出的贡献,负权重则相反当信息到达输出层时,其相应的节点会通过给定的激活函数传递原始输入属于每个标签的概率。


要让CNN学习图像中哪些特征更有可能属于每个标签,需要一个称为“backpropagation”的过程(Rumelhart, Hinton, and Williams 1988):为了发现图像的高级特征,模型从输出层回到输入层。每离开输出层一步,就校准一次神经元之间的权重,以逐渐最小化预测误差(Schrodt 2004; Lucas 2018a)。因此,学习的过程包括多次查看一组标注示例,以找到特征图和权重的最佳组合,从而最大限度地减少真实标签和预测标签之间的差异。可以用损失函数(loss function)来量化这种差异,并作为优化的目标。损失越小,分类器得出的预测结果就越好。类比普通最小二乘(OLS)回归中的损失函数是均方误差,在CNN(以及几乎所有深度学习应用)中,分类的默认损失函数是分类交叉熵损失(categorical cross-entropy loss)。


Backpropagation在高维空间中寻找总损失函数误差导数为零的局部点。为此,CNN修改层间的权重,并检查其对误差产生的变化。这种估计方法称为梯度下降(gradient descent)法——反复计算每个权重相对于损失函数的斜率,并修改这些权重以最小化斜率,直到最终达到函数的底部。这一阶段必须指定几个超参数:

(1) 考虑到梯度下降的迭代性质,有必要指定所有训练实例通过网络的次数(epochs);
(2)
定义神经网络更新权重前需要通过的训练图像数量,即批次大小(batch size);
(3)
指定达到函数局部最小值而采取的步骤的大小和时间,即学习率(learning rate)。


训练数据和验证数据中的预测误差一般会随着epoch次数的增加而减少。当有效性数据集的损失停止减少时,就应该停止训练过程,以防模型开始学习在训练数据之外无法通用的图像特征


如果batch size等于训练图像的总数,那么模型只有在积累了所有训练图像的预测误差后才会更新权重,这可能需要大量的计算内存,同时产生一个静态误差面,梯度下降很可能会陷入局部最小值。相反,如果batch size等于1,模型就会为每个训练实例更新权重,这能降低上述风险,但会产生嘈杂的信号。折中办法通常是将训练数据分成mini-batches,允许在一个epoch中多次更新参数


事先找到最佳学习率也是一个难题。过大的学习率会在函数周围跳跃,超过函数的最小值。过小的学习率更有可能找到局部最小值,但需要很长时间才能收敛。研究人员可以选择不同的梯度下降优化算法(如Adagrad,Adam等),它们的收敛速度更快,而且不需要手动调整学习率




三、实用建议


建立CNN架构

CNN中最简单的结构包括一个带有filter的CONV层,然后是ACT层和POOL层,以及一个带有后续ACT的FC层,该层用于进行预测。可以用以下模式来表示更复杂的架构:

其中,M和K分别为特定序列的重复次数。如上述最简单结构的M = K = 1。


通过增加M或K可以构建更深的网络,卷积层从图像中找到的特征也更复杂。上图中的POOL层后带有“?”,说明并不是所有架构都有这一步。包含POOL层可以让神经网络处理更简单的数据,但也会迫使其关注图像中不那么具体的特征。


超参数的取值没有固定。作为起点,1 ≤ M ≤ 3,K ≥ 1(Rosebrock 2017)。但是,研究人员应该考虑数据的大小、所需输出标签的数量、输出标签之间的相似度以及类内差异(即属于同一标签的对象之间的差异程度)。每个CONV中filter的数量越多,神经网络就会寻找更多具有相同复杂度的图像特征。一些学者建议,每增加一个CONV,就将filter的数量增加一倍(Shang et al. 2016)。Filter的大小也视具体情况而定。如果像素空间足够大,且目标是找到图像的大尺度特征,那么11 × 11或9 × 9的filter将是合适的。然而,如果区分图像的特征更为精细,那么3 × 3或5 × 5将更为合适。最后,在非常复杂的网络中,池化一般在早期阶段使用3 × 3的感受野,然后将其大小缩小到2 × 2。较简单的网络则使用2×2的感受野,并在整个序列中使用2的跨距。新近的研究表明,一些混合池化方法,如“混合最大平均池化”,也能提高性能,但需要额外的计算成本(Lee, Gallagher, and Tu 2016)。


软件

设计和运行CNN的软件有许多,TensorFlow(谷歌)、Caffe(加州大学伯克利分校)、CNTK(微软)、PyTorch(Facebook)和MXNet(AWS)。Keras是一个用Python编写的神经网络API,支持CNN和递归网络等模型,与TenserFlow的交互易用且高效。其他工具包括亚马逊的AWS机器学习训练、谷歌云AutoML或谷歌云机器学习引擎,它们有助于设计CNN架构,并允许研究人员使用预训练模型,适合深度学习的初学者。


不同软件在速度、能效和易用性上存在差异。TensorFlow在运行大模型时速度更快,而Caffe在运行小模型时速度更快。PyTorch比同类产品更节省内存,但MXNet所需的计算能量最少。可见,研究者应考虑数据的规模、复杂性、分类目标,以及手头的硬件和计算资源,来确定使用哪一种软件。


确定合适的训练量

CNN模型的预测准确性只能通过实践获得。如果迭代训练数量少,拟合不足(即模型过于简单),就无法解释图像之间的所有差异。拟合不足的模型在对数据进行分类时会做出很强的假设,从而导致预测结果偏差很大。然而, 如果迭代次数过多,会导致过度拟合,模型就会开始从训练图像中选取噪声或随机波动作为有价值的分类概念。为了避免这两个问题,有一些优化训练方法可以采用,包括增加训练集的规模、探索不同的网络结构、正则化等。

优化训练集

除了训练次数,在选择模型学习的数据量时也应牢记四个概念:主动学习、类别平衡、图像清理和数据增强


主动学习是指从每一类中挑选最有用的实例来训练模型(Settles 2009; Miller, Linder, and Mebane 2020),研究者需要在信息量和代表性之间作出权衡(Huang, Jin, and Zhou 2014)。类别平衡可以防止模型的预测向训练实例较多的标签倾斜(Japkowicz and Stepehn 2002),尤其适合正面案例占少数的情况。图像清理的目的是避免模型学习到与研究者感兴趣的类别无关的视觉特征(比如某个文档中与内容无关的墨迹)。数据增强迫使模型减少对图像中某一特征的具体位置和方向的关注,转而把握其与其他图像特征之间的关系。


迁移学习

迁移学习将已经训练好的模型直接应用于新任务,或作为训练新模型的起点(Pan and Yang 2010),以减少针对特定任务从头训练模型的成本。例如,Zhang and Pan (2019)使用迁移学习来微调VGGNet(一种在 120 万张图像集上训练的经典CNN模型),以识别集体行动事件。


在文本分析中,有学者已经提出了开发通用的语言模型,而无需针对特定的研究任务主题重新设计模型,从而解决数据稀缺的问题。具体可以参考本公众号文章:政治文本分析的机器学习方法:解决数据稀缺的路径 | Political Analysis


检验结果

与文本分析类似,机器编码视觉分析的一个关键原则是“验证、验证、再验证”(Grimmer and Stewart 2013, 269)。可以查看验证集中被错误分类的图像,或者将驱动预测的最相关特征可视化(Zeiler and Fergus 2014; Won et al. 2017)。与寻找回归中最重要的系数类似,这项工作提供了预测背后机制的信息。




四、CNNs的局限性


首先,CNN不考虑图片中物体的方向。理想情况下,我们希望 CNN 能够识别物体,而不管其大小或旋转情况如何。然而,当发现与眼睛、鼻子和嘴巴相关的特征时,CNN就会识别出一张脸,而忽略了眼睛是否在鼻子的下方和嘴巴的上方。造成这一问题的原因是,该模型只关注各层的像素信息,而没有添加所提取特征相对位置的信息。


其次,CNN缺乏不确定性度量。虽然CNN的最后几层提供了图像属于某个类别的“概率”,但使用这些数量时应谨慎。最近的证据表明,对图像进行看似不易察觉的改动会导致结果概率发生巨大变化(Nguyen et al. 2015)。可见,图像以某种方式被识别的可能性不仅取决于图像的基本特征,还取决于一些随机方面,例如图像的光照或图像所占画面的比例。


最后,CNN无法发现潜在维度或对抽象概念进行分类。如果人类无法验证某个特征,那么CNN也无法验证。在分类过程中,一些为视觉信息提供上下文的输入(如位置)会丢失,某些不会误导人类的扰动会对CNN的输出产生重大影响(Gong et al. 2014; Goodfellow et al. 2016)。此外,其他视觉信息也会通过消费这些信息的人的认知偏差、经验和背景进行过滤。CNN依靠事实特征和明确的标签来学习它们之间的关联。因此,抽象概念或潜在特征,如图像唤起的情感,不仅为实际分类过程(Casas and Webb Williams 2019),也为之后的分析和结果验证造成困难。在这种情况下,研究人员对结果进行事后解释的风险很高。




五、应用案例:选票


本文通过墨西哥2015年联邦选举的选票统计中提取信息来展现CNN如何应用。对处理不同类型档案的学者而言,CNN可能是一个有用的工具( Coüasnon, Camillerapp, and Leplumey 2007; Lladós et al. 2007; Taylor 2008; Homola 2018; Huff 2018)。同时,它还提出了一种透明、具有成本效益的机制,用于记录选举中普遍使用的手工计票信息。该技术可帮助管理者减少手工计票过程中的意外错误,而这一问题在墨西哥近40%的计票过程中都会出现(Challú, Seira, and Simpser 2020)。此外,这项技术还能缩短宣布结果的等待时间。


图3是一个计票结果的手写数字示例。首先用一个函数提取统计表的数字,随后建立了训练集、验证集和测试集,大小分别为24271、2000和2616。目标样本中的23058个数字来自该国的一个特定地区。

图3


本文用3个步骤来寻找“最优”模型:


(1) 首先,利用一个已经训练过的模型读取MNIST数据集(LeCun et al. 1989),并检验其准确性。MNIST数据集训练了一个包含两个卷积层和三个全连接层的基础模型,准确率达到0.9914。但该基础模型在预测统计表中的数字时准确率大幅下降,仅为0.3245。这是数据的特殊性造成的:选票上的数字大多不清晰,像素强度范围更大,有边框、污点、铅笔痕迹。


(2) 其次,使用超参数网格搜索对模型进行微调,包括卷积层数、每层的filter数量、丢弃率、FC层数和epoch数。最终,微调模型包含三个卷积层(分别有32、32和112个大小为3 × 3的filter)、0.2的丢弃率和更密集的FC层(分别有110和30个节点)。微调后的模型在验证数据上的准确率达到0.3720。


(3) 最后,用迁移学习让模型学习本案例数据的特征,以进一步适应特定主题。这一步使用统计表中的24271个标注数字重新训练模型,并冻结微调模型的第一个卷积层(即加载微调模型只使用MNIST数字作为训练数据时找到的权重)。对训练集进行数据扩充提高了模型的预测性能:验证集和测试集中的准确率分别为0.9495和0.9659。


模型误差背后的原因包括:数字错置在引导框之外、难以辨认的数字、特定的笔迹风格(比如混淆“4”和“9”)。因此,研究者需要主动找出模型中的错误源,并纠正最重要的错误。


为了检验模型预测的总体有效性,计算墨西哥城#15国会选区各党派的总得票数。由于所有票数都有三位数,包括前导零,因此用票数中每位数字的标签概率的加权平均值来估算预测的不确定性。这种加权平均法更重视发生在百位数上的错误,而不是发生在十位数或个位数上的错误。例如,如果模型将“9”误标为“4”,那么当票数为“931”时(低估500票),票数偏差将大于票数为“139”时(仅低估5票)。计算出每张选票的加权平均值后,将平均值大于0.9的选票标记为“高质量”。


图4比较了各政党的估计得票率(所有计票结果为叉形;“高质量”的计票结果为三角形)和选举当局报告的得票率(圆形)。CNN的比例与官方相近,而在使用高质量计票时,这一性能有所改善。总体而言,该方法能够正确识别票数的排名和大小,可见其在数据收集任务中具有强大功能。

图4





六、结论

CNN在社会科学的多个领域都有广泛应用,比如收集图像数据(如历史文件的签名、特定政策的投票、分类手写笔记甚至提取和解释符号),或对复杂的政治现象进行编码。在图片和视频越来越多地影响公众舆论、精英决策和政治动态的时代,从图片和视觉内容中提取信息会带来更多的相关问题


本文概述了CNN的结构、功能和实施,以便社会科学家更好地应用这一工具。通过CNN对选票统计信息进行编码的案例,本文说明了“真实世界(real-world)”的数据对测试表现良好的模型的挑战。本文还提供了一系列建议,帮助社会科学家深入深度学习和CNN领域。希望学者们在自己的分析中使用这一工具来获得实质性的收益,同时避免常见的误解和陷阱。




编译 | Publius
审核 | 李晶晶
终审 | 何升宇
©Political理论志
本文观点仅供参考,不代表Political理论志观点

“在看”给我一朵小黄花

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/167585
 
242 次点击