目录

CV_6全连接神经网络(下)


全连接神经网络(下)

1.欠拟合、过拟合、dropout

过拟合——参数过多,只记住数据而非学习到了特征

欠拟合——过于简单,找不到数据特征

机器学习的根本问题是优化和泛化的问题

  • 训练初期:优化和泛化相关,训练集和验证集的损失一并变小
  • 训练后期:在验证集的错误率变高,出现过拟合,开始学习仅和训练集数据有关的模式(不具备泛化能力)

解决:

  • 最优方案:获取更多数据
  • 次优方案:正则化
    • 调节模型大小
    • 增加正则项
    • 随机失活(dropout)

随机失活

让隐层神经元有一定概率不被激活

训练时,对某一层使用dropout,将该层某些神经元输出舍弃(输出为0)

解决过拟合原因:

  • 降低模型复杂度
  • 鼓励权重分散,达到类似正则化的作用
  • 可以看做模型集成,由多个小网络组成的投票分类器

存在问题:训练时的神经元输出大小同验证和预测时输出大小相差较大使得模型失效

https://s3.bmp.ovh/imgs/2022/07/27/edcc881feb515098.png

解决方法:训练时新增dropout层(U1,U2),将原始分数除以失活概率p

p = 0.5 #神经元保持激活状态的概率,该值越高失活单元越多
def train_new(X):
	H1 = np.maximum(0, np.dot(W1, X) + b1)
	U1 = (np.random.rand(*H1.shape) < p) / p#第一层的mask注意除了p
	H1 *= U1
	H2 = np.maximun(0, np.dot(W2, H1) + b2)
	U2 = (np.random.rand(*H2.shape) < p) / p#第二层的mask注意除了p
	H2 *= U2
	out = np.dot(W3, H2) + b3
	
def predict_new(X):
	H1 = np.maximum(0, np.dot(W1, X) + b1)
	H2 = np.maximun(0, np.dot(W2, H1) + b2)
	out = np.dot(W3, H2) + b3

2.超参数

  • 网络结构:
    • 隐层神经元个数
    • 网络层数
    • 非线性单元选择
    • ……
  • 优化相关
    • 学习率
    • dropout比率
    • 正则项强度
    • ……

3.优化

  • 网格搜索
  • 随机搜索(神经网络常用)

搜索过程:

  1. 粗搜索:利用随机搜索方式在整个超参数空间采样超参数,训练一个周期后依据验证集正确率缩小超参数范围
  2. 精搜索:利用随机搜索方式在前述缩小范围内采样超参数,运行五到十个周期后选择验证集上精度最高的那组超参数

4.超参数采样空间

log空间

因为相同数量级上超参数的改动一般来说影响较小,因此不能再原有空间进行采样,要对原采样空间进行对数处理这样能够保证在不同的数量级能够有大致相同的采样数量。