目录
2.3权重衰减(L2正则化)与丢弃法(dropout method)
2.5.1 权重衰减(L2正则化)与丢弃法(dropout method)
一、知识汇总
1.思维导图
今天是本次夏令营的最后一次笔记,首先po上自己整理的task3阅读内容思维导图,不得不说模型偏差和优化问题的判断那里整理了很久~
二、 思考
2.1模型限制
文中讲到给模型制造限制可以有早停(early stopping)、正则化(regularization)和丢弃法(dropout method)的方法。而这是为了让模型不要有太大的灵活性,是解决过拟合的重要手段。
2.2过拟合
什么是过拟合?书中举了一个极端的例子,用很废的机器学习的方法找出了一个一无是处的函数,这个一无是处的函数,只要 输入 x 有出现在训练集里面,就把它对应的 y 当做输出。如果 x 没有出现在训练集里面,就输出一个随机的值。这个函数啥事也没有干,其是一个一无是处的函数,但它在训练数据上的损失是 0。就像一个在室内训练滑板的小孩,它可能学到了很多在室内练习的技巧,但每个面对新环境时却束手无策。
要解决这个问题,我们可以从减少模型的复杂度开始。如果模型过于复杂,它会学习到训练数据中的每一个细节,而不是学习到数据的普遍规律。就像给孩子减负一样,减少模型的层数或每层的神经元数量,让模型不要过分依赖训练数据的细节,而是学会更通用的规律。
也可以通过使用数据增强技术,比如图像的旋转、翻转等,可以增加数据的多样性,帮助模型学习到更广泛的情况。
正则化就像是小孩在滑滑板过程中,给他增加的一些障碍,逼迫他学会更多滑行规律。
在机器学习中,正则化技术可以帮助模型减少对训练数据细节的依赖,从而提高其泛化能力。常见的正则化方法包括 权重衰减和Dropout 。
2.3权重衰减(L2正则化)与丢弃法(dropout method)
权重衰减(L2 正则化)是在损失函数中加入权重的平方和,防止模型权重过大,使其更加平滑,从而减少过拟合。
Dropout的原理很简单:在每个迭代过程中,随机选择某些节点,并且删除前向和后向连接,如下图所示:
因此,每个迭代过程都会有不同的节点组合,从而导致不同的输出。这可以看成机器学习中的集成方法(ensemble technique)。集成模型一般优于单一模型,因为它们可以捕获更多的随机性。相似地,dropout使得神经网络模型优于正常的模型。
选择移除多少节点的概率值也是一个超参数。
2.4早停(early stopping)
如果小孩练习滑板时间很长,很可能会变得过于依赖室内的某些具体细节,而不是学会一般的滑行规律。
同样,机器学习模型训练时间过长,也可能导致过拟合。
使用早停法(Early Stopping),在验证集表现不再提升时停止训练,可以防止模型过度拟合。
有些人可能在室内滑滑板表现很好,但在室外却表现不好,因为他们只适应了室内的环境,缺乏在更复杂环境中滑行的经验。
这就像模型在训练集上表现很好,但在测试集上表现不佳,因为模型欠缺泛化能力,无法应对新的数据。
这里可以用到交叉验证,它通过将训练集划分为若干个子集,然后依次使用其中一个子集作为验证集,其余子集联合作为训练集,从而实现对模型性能的全面评估。这种方法可以确保模型在各种不同的数据配置下都能保持稳定性和一致性,增强了模型的泛化能力。
2.5实践
2.5.1 权重衰减(L2正则化)与丢弃法(dropout method)
训练过程中可能没有使用足够的正则化技术,导致模型对训练数据过度拟合。
引入正则化技术,如L1、L2正则化或Dropout,以减少模型对训练数据的依赖。
在Keras中,我们使用regularizers模块来在某个层上应用L1或者L2正则化。下面是在Dense层应用L2正则化:
from keras import regularizers
model.add(Dense(64, input_dim=64,
kernel_regularizer=regularizers.l2(0.01)
当我们具有较大的神经网络时,通常首选dropout以引入更多的随机性。
在Keras中,我们可以使用Dropout层实现dropout,代码如下:
from keras.layers.core import Dropout
model = Sequential([
Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu'),
Dropout(0.25),
Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),
])
2.5.2 早停(early stopping)
此外,可能没有有效地监控模型在训练过程中的表现,特别是在测试集上的表现。
可以使用早停法,在测试集准确率不再提升时停止训练,避免过拟合。
在Keras中,我们可以使用callbacks函数实现早期停止,下面是样例代码:
from keras.callbacks import EarlyStopping
EarlyStopping(monitor='val_err', patience=5)