摘要:
深度学习成功背后的一个因素是神经网络的灵活性: 我们可以用创造性的方式组合不同的层,从而设计出适用于各种任务的架构。 例如,研究人员发明了专门用于处理图像、文本、序列数据和执行动态规划的层。 有时我们会遇到或要自己发明一个现在在深度学习框架中还不存在的层。 在这些情况下,必须构建自定义层。本节将展示 阅读全文
摘要:
到目前为止,我们忽略了建立网络时需要做的以下这些事情: 我们定义了网络架构,但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时,甚至没有足够的信息来确定模型应该包含多少参数。 有些读者可能会对我们的代码能运行感到惊讶。 毕竟,深度学习框架无法判断网络的输入维度是什么。 阅读全文
摘要:
参数访问 我们从已有模型中访问参数。 当通过Sequential类定义模型时, 我们可以通过索引来访问模型的任意层。 这就像模型是一个列表一样,每层的参数都在其属性中。 如下所示,我们可以检查第二个全连接层的参数。 print(net[2].state_dict()) OrderedDict([(' 阅读全文
摘要:
一个块可以由许多层组成;一个块可以由许多块组成。 块可以包含代码。 块负责大量的内部处理,包括参数初始化和反向传播。 层和块的顺序连接由Sequential块处理。 下面给出一个例子(以pyTorch为例) class NestMLP(nn.Module): def __init__(self): 阅读全文
摘要:
🤔️如何避免梯度爆炸或消失? 在参数初始化时需要非常小心,以确保梯度和参数可以得到很好的控制(随即初始化) ReLU激活函数缓解了梯度消失问题,这样可以加速收敛。(Sigmoid激活函数在输入很大或是很小时,它的梯度都会消失。) 阅读全文
摘要:
在训练神经网络时,前向传播和反向传播相互依赖。 对于前向传播,我们沿着依赖的方向遍历计算图并计算其路径上的所有变量。 然后将这些用于反向传播,其中计算顺序与计算图的相反。 因此,在训练神经网络时,在初始化模型参数后, 我们交替使用前向传播和反向传播,利用反向传播给出的梯度来更新模型参数。 注意,反向 阅读全文
摘要:
偏差指的是模型与真实数据分布之间的误差。线性模型能表示的函数空间有限,所以存在偏差。 方差指同一模型在不同训练集上的输出变化。简单模型方差小,复杂模型容易过拟合,方差大。 1. 泛化性好的模型往往偏差高,方差低。比如简单的线性模型。 2. 灵活性强的模型往往偏差低,方差高。比如复杂的深度神经网络。 阅读全文
摘要:
正则化 正则化(Regularization)是机器学习中的一类技术,其通过对模型添加惩罚项来解决过拟合问题,从而提高模型的泛化能力。 正则化的主要思想是在损失函数中引入模型复杂度的惩罚项,强制模型保持一定的简单性和平滑性。 比较常见的正则化方法包括: - L1正则化:对权重参数的绝对值之和进行惩罚 阅读全文