什么是超参数?大模型的超参数是做什么用的?超参数和大模型参数有什么关系? 原创
“ 超参数是指由开发者设置的参数,而不是由模型训练得到的参数”
对了解过机器学习模型的人来说,应该都知道模型训练的过程就是不断调整模型参数的过程。调整方式就是通过正反向传播以及损失差的计算和优化器对参数进行调整,不懂得可以看一下文章大模型的参数什么。
而超参数又是什么呢?今天就来介绍一下超参数。
01、什么是超参数?
用一句话来说,超参数就是模型开发者设置的参数,而不是由模型通过训练学习到的参数。
怎么理解这句话呢?
先来说一下模型的参数,现在说大模型都是有多少多少参数,比如chatGLM-6B就是具有六十多亿参数的模型,而chatGPT4传说有一百多万亿个参数。
而我们平常说的大模型的大就是指参数量大,从实验结果来看参数量越大效果越好。因此,现在很多大企业开发大模型都在追求大参数量模型。比如,openAI,谷歌,meta和国内的阿里,百度等企业。
而模型参数指的是神经网络的参数,是可以通过训练数据训练调整的参数,最典型的两个就是权重(W)和偏置(B),这些参数值刚开始是随机初始化,然后通过训练数据不断的调整,最后获得一个最优解。
那超参数又是什么?
现在再来看开头那句话应该就明白了,模型参数是可以训练得到的;但有些参数是需要开发者设定的,然后又不能通过训练获得,这部分参数就是超参数,超也可以理解为人为设置的意思。
超参数有哪些?
超参数其实也有很多,根据不同的模型架构设计,超参数也会有所不同;但常见的超参数有训练次数(epochs),批次大小(batch_size),学习率(lr),隐藏层数量和大小(隐藏层数量是指神经网络的层数,大小是指每层神经网络的神经元数量,具体可以看神经网络内部原理解析),损失函数,优化器,以及正则化参数,丢弃率等都属于超参数。
02、超参数的作用是什么?
前面介绍了超参数以及常见的超参数,这里就来介绍一下超参数的作用。
简单来说,超参数的作用就是怎么训练模型,以及怎么把模型训练的更好,具体来说就是模型的性能和泛化能力。
就拿训练次数——epochs来说,这个参数的作用是模型在当前数据集上训练多少次。
举例来说,我们上学时一章新内容或题目,老师基本上都会讲好几遍,这个好几遍就是epochs。epochs具体的值根据不同的网络模型,以及训练数据会有所不同,大部分都是在10到几百之间。
而批次大小参数——batch_size的作用就是,训练时每次加载多少数据,一般是8的倍数。batch_size值越大,训练的批次数越少,梯度下降越快,但对硬件要求会更高,误差也可能会更大。
模型训练代码,超参数设置简略代码
# 设置训练网络的参数
# 记录训练次数
total_train_step = 0
# 记录测试次数
total_test_step = 0
# 训练的轮数
epoch = 10
for i in range(epoch):
print("第{}轮训练开始".format(i+1))
for data in train_dataloader:
# 获取训练数据和标签
imgs, targets = data
# 神经网络对数据进行处理
outputs = myNn(imgs)
# 计算损失值 监督学习 使用神经网络处理结果与标签做对比,计算损失差
loss = loss_fn(outputs, targets)
optimizer.zero_grad()
# 反向传播
loss.backward()
# 优化器优化
optimizer.step()
total_train_step = total_train_step + 1
print("训练次数: {}, Loss: {}".format(total_train_step, loss))
学习率——lr是更新权重时的步长,它影响着目标函数是否能收敛到局部最小;学习率大可能会导致损失震荡,甚至是无法拟合。
而学习率太小又可能会导致过拟合,收敛速度过慢的问题。所谓的震荡就是损失函数的值可能不是慢慢减小,而是一会大一会小。
假如你在训练的时候发现损失值出现这种现象,那么就是学习率设置有问题。
一般情况下,学习率都是设置一个动态值,比如训练开始时学习率比较大,随着训练慢慢减小。
而隐藏层的数量和大小,代表着神经网络的抽象能力,越多的层数和神经元就能表征更复杂的场景,但过多的隐藏层也会导致神经元过于复杂以及过拟合的问题。
损失函数和优化器又会影响到模型训练的结果以及优化效果。
因此,超参数也需要根据不同的模型架构设计一个合理的参数值,并且在合适的时机进行适当的调整。
本文转载自公众号AI探索时代 作者:DFires
原文链接:https://mp.weixin.qq.com/s/EqmK4cxR76dkVm3xGPOg_g