AIC 的人工神经网络中的参数数量

机器算法验证 神经网络 aic
2022-01-20 21:27:57

如何计算人工神经网络中的参数数量以计算其 AIC?

4个回答

在前馈网络中学习的每个连接都是一个参数。这是来自 Wikipedia 的通用网络的图像:

在此处输入图像描述

这个网络是完全连接的,尽管网络不是必须的(例如,设计一个具有感受野的网络可以改善图像中的边缘检测)。对于完全连接的 ANN,连接数只是连接层中节点数的乘积之和。在上图中,即(3×4)+(4×2)=20. 该图像没有显示任何偏置节点,但许多 ANN 确实有它们;如果是这样,则将偏置节点包括在该层的总数中。更一般地(例如,如果您的 ANN 没有完全连接),您可以简单地计算连接数。

我认为这是一个病态的问题。与许多其他机器学习算法一样,在神经网络中,当惩罚 AIC 时,很难说我们究竟将什么算作“参数”。AIC 的重点是通过复杂性来惩罚对数似然的模型。对于简单模型,如线性回归或逻辑回归,这很简单,因为回归参数的数量决定了模型的复杂性。对于简单的前馈神经网络,情况也是如此,但考虑到您可以在不增加参数数量的情况下增加神经网络的复杂性:您可以使用跳过连接、最大池化、屏蔽、权重归一化等。 ,它们都没有参数。此外,您对 dropout 有什么看法,它“关闭”了网络可用的参数,所以也许我们应该在使用它时减少参数的数量?在复杂的机器学习算法的情况下,参数的数量作为模型复杂性的衡量标准的用处要小得多。

更复杂的是,在神经网络中观察到偏差-方差权衡似乎并不适用使用 AIC 背后的基本原理是“更简单”的模型更好,因为它更易于解释且不易过拟合。如果看起来,神经网络不必随着参数数量的增加而更容易过度拟合,那么如果惩罚它是有道理的,那就有争议了。

对于MLP 完全连接的网络,您可以使用以下 (Python) 代码:

def total_param(l=[]):
s=0
for i in range(len(l)-1):
    s=s+l[i]*l[i+1]+l[i+1]
return s

那么如果你有一个具有以下层配置的网络

input:  435
hidden: 166 
hidden: 103 
hidden:  64
output:  15

你只需调用函数

total_param([435,166,103,64,15]) 
97208

神经网络只是函数的函数......(由模型的架构决定)。如果生成的函数无法简化,则模型中的参数总数(来自每个节点的所有参数的总和)就是您想要用于 AIC 计算的数字。