温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者: 伊凌雪 (中央财经大学)
邮箱: yilingxue99@163.com
目录
人工神经网络(Artificial Neural Networks,简写为ANNs)是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的,并具有自学习和自适应的能力。
人工神经网络是一种运算模型,由大量的节点以及它们之间的连接构成。每个节点代表一个函数,而连接则代表权重。它可以描述为有向图,其中每个节点
可以根据人工神经网络的连通性,将其分为前馈类和递归类。如果存在一种对网络中所有节点编号的方法,则人工神经网络是前馈的,这样就不会存在从数量较大的节点到数量较小的节点的连接,所有连接都是从数量较小的节点到数量较大的节点。如果不存在这种编号方法,人工神经网络则会重复出现。
在上述中,求和中的每个项仅包含一个输入节点
人工神经网络的体系结构由其拓扑结构决定,即网络中每个节点的整体连通性和传递函数。
在人工神经网络中的学习大致可分为监督学习、无监督学习和强化学习。学习算法的本质是学习规则,即确定连接权重如何变化的权重更新规则。
监督学习是基于人工神经网络的实际输出和期望的正确输出(也称为目标输出)之间的直接比较。通常将其表述为误差函数的最小值,例如实际输出和期望输出之间的总均方误差与所有可用数据之和。然后可以使用基于梯度下降的优化算法,如反向传播(BP),迭代地调整人工神经网络中的连接权重,以最小化误差。
强化学习是监督学习的一种特殊情况,其中的确切期望输出是未知的。它只基于实际输出是否正确的信息。
无监督学习仅基于输入数据之间的相关性。没有关于“正确输出”的信息可供学习。
(1)市场价格预测
对商品价格变动的分析,可归结为对影响市场供求关系的诸多因素的综合分析。传统的统计经济学方法因其固有的局限性,难以对价格变动做出科学的预测,而人工神经网络容易处理不完整的、模糊不确定或规律性不明显的数据,所以用人工神经网络进行价格预测是有着传统方法无法相比的优势。在不牺牲线性决策环境性能的情况下,神经网络模型在改善这些非线性决策环境中的模型预测方面具有巨大潜力。
从市场价格的确定机制出发,依据影响商品价格的家庭户数、人均可支配收入、贷款利率、城市化水平等复杂、多变的因素,建立较为准确可靠的模型。该模型可以对商品价格的变动趋势进行科学预测,并得到准确客观的评价结果。
(2)风险评估
风险是指在从事某项特定活动的过程中,因其存在的不确定性而产生的经济或财务的损失、自然破坏或损伤的可能性。防范风险的最佳办法就是事先对风险做出科学的预测和评估。应用人工神经网络的预测思想是根据具体现实的风险来源, 构造出适合实际情况的信用风险模型的结构和算法,得到风险评价系数,然后确定实际问题的解决方案。利用该模型进行实证分析能够弥补主观评估的不足,可以取得满意效果。
人工神经网络主要架构是由神经元、层和网络三个部分组成,整个人工神经网络包含一系列基本的神经元、通过权重相互连接。神经元是人工神经网络最基本的单元,单元以层的方式组,每一层的每个神经元和前一层、后一层的神经元连接,共分为输入层、输出层和隐藏层,三层连接形成一个神经网络。
在正式介绍之前,需要使用 ssc install brain
安装该命令,可以使用 help brain
查看该命令的帮助文件。
brain define [if] [in], input(varlist) output(varlist)[hidden(numlist)] [spread(default = 0.25)]
定义神经网络的结构。input(varlist)
和output(varlist)
分别用于表示输入神经元和输出神经元。hidden(numlist)
表示隐藏层,用于产生简单的感知器。每个数字从输入层开始定义一个相应大小的隐藏层。spread
表示反向传播的起始值均匀分布在 [ -spread
,+ spread
] 之间,默认在 [ -0.25,0.25 ] 之间。
brain save filename
将神经网络矩阵保存到文件中。 默认后缀为“ .brn”。
brain load filename
从文件调用已经训练完的神经网络矩阵。 默认后缀为“ .brn”。
brain signal, [raw]
按顺序激活每个输入信号,并将差值报告给水平线。水平线的信号可以在列表的底部找到,以标准化形式 [ 0 , 1 ] 指定raw
报告信号。
存储结果:在输出信号上输入神经元的r(signal)
矩阵
brain feed input_signals, [raw]
根据指定的输入信号显示输出。选项raw
将所有值声明为归一化的输入信号 [ 0 , 1 ],否则它们将根据相应的变量上下文进行解释。可以使用以下矩阵上的matrix list
来访问网络状态:input
,neuron
, output
存储结果:输出信号的r(output)
矩阵(归一化和原始)
brain train [if] [in], iter(default = 0) [eta(default = 0.25)] [nosort]
iter()
表示迭代次数,eta
为训练因子,eta
的默认值为0.25,nosort
可以防止对训练数据进行随机排序。
存储结果:
r(N)
使用的观测值的数量r(err)
最终误差brain think output_varlist [if] [in]
使用训练好的神经网络模型进行预测,来创建或者覆盖指定的输出神经元。输出神经元的数量必须与输入神经元的数量相匹配。如果输入神经元超出为网络定义的限制,则其信号将相应地被截断以保持在 [ 0 , 1 ] 范围内。
brain margin [input_varlist] [if] [in]
通过计算估计的输出与输入神经元的常数零信号之间的差,报告所选输入神经元( 默认值 = all
)对输出神经元的边际影响。
存储结果:输入神经元在边际输出信号上的 r(margin)
矩阵
brain
基于以下矩阵实现反向传播网络:
input
定义输入神经元名称,其中包含输入信号和归一化参数output
定义输出神经元名称,其中包含输出信号和归一化参数neuron
包括神经元信号layer
定义网络结构brain
包含突触权重和偏差注意潜在的名称冲突,使用矩阵列表 matrix_name
来研究网络矩阵的内容。
情形一:brain
样本内预测
将brain
与 OLS 的拟合效果进行比较
set obs 100 //设定100个观测值
gen x1 = invnorm(uniform()) //生成两个服从正态分布的参数 x1
gen x2 = invnorm(uniform()) //生成两个服从正态分布的参数 x2
gen y = x1 + x2 + x1^2 + x2^2 + x1*x2 //生成与 x1、x2 存在非线性关系的变量y
sum y //对y进行描述性统计分析
scalar ymean = r(mean) //产生标量y的均值
egen sst = sum((y-ymean)^2) //计算总平方和 sst
reg y x1 x2
predict yreg
egen rreg = sum((y-yreg)^2) //计算残差平方和 ssr
用神经网络预测y值,来计算 R 的平方。通过定义神经网络结构,输入 x1 和 x2 ,输出 y ,隐藏 10层。
brain define, input(x1 x2) output(y) hidden(10 10)
利用定义的神经网络进行训练,迭代次数为 500 次,eta
数值为1。
brain train, iter(500) eta(1)
得出神经网络对 y 的预测值变量 ybrain,并计算残差平方和,最后得出判定系数
brain think ybrain
egen rbrain = sum((y-ybrain)^2)
di "R-squared reg: " 1-rreg/sst //判定系数R的平方
R-squared reg: .07468528
di "R-sq. brain: " 1-rbrain/sst
R-sq. brain: .8383261
通过以上判定系数R的平方,可知神经网络比 OLS 回归的预测拟合效果要好。
绘制图形:
*-Graphing
gen t = _n
twoway line y* t, legend(ring(0) pos(11) col(1))
graph export "OLS_Brain_predict.png", replace
输出图形为:
情形二:brain
样本外预测
沿用上述范例,样本外,比较真实 y 值与神经网络预测的 ybrain 。
clear
set seed 1000 //设定训练集的种子值
set obs 100 //生成100个观测值
gen x1 = invnorm(uniform()) //生成服从正态分布的变量x1
gen x2 = invnorm(uniform()) //生成服从正态分布的变量x2
gen y = x1 + x2 + x1^2 + x2^2 + x1*x2 //生成一个与x1、x2存在非线性关系的变量y
brain define, input(x1 x2) output(y) hidden(10 10) //定义神经元,隐藏10层
brain train, iter(500) eta(1) nosort //迭代500次,训练因子设定为1
brain save nnmodel //将训练好的神经网络模型保存为nnmodel
读入新的样本外数据
clear
set seed 2000 //设定样本外数据的种子值
set obs 100 //同样生成100个观测值
gen x1 = invnorm(uniform()) //变量生成方法与训练集一致
gen x2 = invnorm(uniform())
gen y = x1 + x2 + x1^2 + x2^2 + x1*x2 //计算真实的y用于比较
调用神经网络
brain load nnmodel //调用训练好的名为nnmodel的神经网络模型
神经网络模型预测
brain think ybrain //得到y的样本外预测值,保存为新变量 ybrain
计算神经网络预测的
sum y
scalar ymean = r(mean)
egen sst = sum((y-ymean)^2)
egen rbrain = sum((y-ypred)^2)
di "R-sq. = " 1-rbrain/sst
R-sq. = .7723573
可见,神经网络模型的预测效果不错。通过绘制图形进行对比:
gen t = _n
twoway line y* t, legend(ring(0) pos(11) col(1))
输出预测结果对比图:
可以发现,通过神经网络模型的样本外预测得到的预测值与真实值之间差异并不大,进一步验证了神经网络模型较为优良的样本外预测效果。
将 OLS 与brain
的非线性函数比较
clear
set obs 200 //设定200个观测值
gen x = 4*_pi/200 *_n
gen y = sin(x)
reg y x
predict yreg
用神经网络预测y值,通过定义神经网络结构,输入 x ,隐藏20层。
brain define, input(x) output(y) hidden(20)
利用定义的神经网络进行训练,迭代次数为 500 次,eta
数值为 2 。
brain train, iter(500) eta(2)
得出神经网络对 y 的预测值变量 ybrain
brain think ybrain
绘制图形:
twoway (scatter y x, sort) (line yreg x, sort) (line ybrain x, sort), ///
legend(ring(0) pos(1) col(1))
graph export "OLS_Brain_NLS.png", replace
输出图形为:
从上图可知,神经网络可以很好地解决非线性问题。
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD