chap-网络正则化与优化
正则化和最优化算法

正则化和最优化算法正则化和最优化算法是机器学习中常用的两个概念,它们在模型训练和优化过程中起着重要的作用。
本文将介绍正则化和最优化算法的概念、原理以及在机器学习中的应用。
一、正则化正则化是为了防止模型过拟合而引入的一种方法。
在机器学习中,我们通常会遇到两种情况:欠拟合和过拟合。
欠拟合指的是模型无法很好地拟合训练数据,而过拟合则是指模型过于复杂,过度拟合了训练数据,导致在新数据上表现不佳。
为了解决过拟合问题,我们可以通过正则化来限制模型的复杂度。
常用的正则化方法有L1正则化和L2正则化。
L1正则化通过在损失函数中增加L1范数的惩罚项,使得模型的权重向量趋向于稀疏,即某些权重变为0,从而达到特征选择的效果。
L2正则化则是在损失函数中增加L2范数的惩罚项,使得模型的权重向量变得更小,从而减小模型的复杂度。
正则化可以有效地减少模型的过拟合程度,提高模型的泛化能力。
二、最优化算法最优化算法是为了求解最优化问题而设计的一类算法。
在机器学习中,我们通常需要通过优化算法来求解模型的参数,使得模型在训练数据上的损失函数最小化。
最优化算法的目标是找到使得损失函数取得最小值的参数。
常用的最优化算法有梯度下降法和牛顿法。
梯度下降法是一种迭代算法,通过计算损失函数对参数的梯度,并沿着梯度的反方向更新参数,以此来逐步减小损失函数的值。
梯度下降法的优点是简单易实现,但可能会陷入局部最优解。
牛顿法是一种基于二阶导数信息的优化算法,它通过计算损失函数的一阶导数和二阶导数来更新参数,具有更快的收敛速度,但计算复杂度较高。
三、正则化和最优化算法的应用正则化和最优化算法在机器学习中有广泛的应用。
在回归问题中,通过正则化可以控制模型的复杂度,避免过拟合。
在分类问题中,正则化可以提高模型的泛化能力,减小分类错误率。
在神经网络中,正则化可以通过限制权重的大小来防止过拟合。
最优化算法则用于求解模型的参数,使得模型在训练数据上的损失函数最小化。
ChatGPT技术的机器学习算法选择与优化方法

ChatGPT技术的机器学习算法选择与优化方法自然语言处理(Natural Language Processing,NLP)的快速发展为人与计算机之间的交流带来了新的机会与挑战。
近年来,基于神经网络的生成式对话模型在NLP领域取得了显著进展。
其中,OpenAI的ChatGPT技术成为了人们关注的焦点。
ChatGPT是一个强大的生成式语言模型,可以模拟人类风格的对话,并且回应准确度很高。
然而,ChatGPT的成功背后离不开机器学习算法的选择与优化方法。
为了构建ChatGPT这样复杂的对话系统,研究人员需要选择合适的机器学习算法。
一种常用的算法是递归神经网络(Recurrent Neural Network,RNN),它具有处理序列数据的能力,适用于对话模型中对历史对话的建模。
RNN能够记忆先前的输入,并将其应用于后续的计算中,从而捕捉上下文依赖关系。
然而,RNN也存在一些问题,如梯度消失和爆炸等,这可能导致模型训练过程中的不稳定性。
为了克服这些问题,研究人员探索了一些改进的RNN模型,如长短期记忆网络(Long Short-Term Memory,LSTM)和门控循环单元(Gated Recurrent Unit,GRU)等。
除了RNN系列模型,研究人员还考虑了一些其他的机器学习算法。
例如,卷积神经网络(Convolutional Neural Network,CNN)在图像处理领域表现优异,但在NLP任务中的应用相对较少。
然而,通过将文本表示为二维矩阵,CNN可以有效地捕捉局部关联和特征,用于文本分类和问答等任务。
在ChatGPT中,研究人员可以将对话历史转化为矩阵形式,并使用CNN进行特征提取,使模型更好地理解上下文信息。
另一个重要的算法选择是注意力机制(Attention Mechanism)。
注意力机制允许模型聚焦于输入序列中与当前计算相关的部分,从而改善模型对长文本的处理能力。
在ChatGPT中,注意力机制可以提高对话模型的生成效果,使其能够更好地关注于需要回应的部分。
如何调整ChatGPT模型的参数与超参数设置

如何调整ChatGPT模型的参数与超参数设置在自然语言处理领域,ChatGPT模型是一种非常受欢迎的生成式对话模型。
它基于强化学习和自监督学习的思想,通过大规模的预训练和微调过程,使得模型能够生成流畅、有逻辑的对话回复。
然而,要想让ChatGPT模型表现更好,合理地调整参数和超参数设置是非常关键的。
1. 参数调整参数是模型内部的可学习参数,通过优化算法进行更新。
调整参数可以改变模型的能力和性能。
1.1 学习率学习率是控制参数更新步长的重要超参数。
如果学习率过小,模型收敛速度会很慢;如果学习率过大,可能会导致模型无法收敛。
一般来说,可以先使用较大的学习率进行训练,然后逐渐减小学习率,以获得更好的性能。
1.2 批量大小批量大小是指每次迭代更新时,模型从训练数据中取出的样本数量。
较大的批量大小可以提高训练速度,但也可能导致模型过拟合。
较小的批量大小则可以提高模型的泛化能力,但训练速度较慢。
在实践中,可以尝试不同的批量大小,并根据验证集的性能选择合适的数值。
1.3 正则化正则化是一种防止过拟合的技术。
在ChatGPT模型中,可以通过添加L1或L2正则化项来限制参数的大小。
合适的正则化可以提高模型的泛化能力,但过强的正则化可能会导致模型欠拟合。
2. 超参数调整超参数是在训练过程中需要手动设置的参数,不能通过优化算法进行更新。
调整超参数可以影响模型的结构和性能。
2.1 Transformer层数ChatGPT模型基于Transformer结构,其中包含多个Encoder和Decoder层。
增加Transformer层数可以增加模型的容量,但也会增加计算和存储成本。
在实践中,可以通过交叉验证等方法,选择合适的Transformer层数。
2.2 隐藏层维度隐藏层维度决定了模型中间表示的维度大小。
较大的隐藏层维度可以提高模型的表示能力,但也会增加计算和存储成本。
一般来说,可以根据任务的复杂度和训练数据的规模选择合适的隐藏层维度。
ChatGPT技术对话生成速度与效率的优化方法

ChatGPT技术对话生成速度与效率的优化方法ChatGPT是一种基于深度学习的对话生成模型,具有强大的生成能力,但在实际使用中也面临着一些挑战,如速度和效率问题。
本文将探讨ChatGPT技术对话生成速度与效率的优化方法。
一、引言在当今社交媒体的普及和人们对智能对话系统的需求增加的背景下,ChatGPT 作为一种新兴的对话生成技术,具有很高的潜力和应用前景。
然而,目前的ChatGPT模型在生成对话时面临着速度慢、效率低等问题,限制了其实际应用的范围。
因此,我们需要找到一些优化方法来解决这些问题。
二、模型剪枝模型剪枝是一种通过减少模型参数以提高速度和效率的方法。
在ChatGPT中,我们可以通过剪枝一些冗余参数来减小模型的体积,从而提高对话生成的速度。
通常可以使用一些剪枝算法,如L1正则化、迭代剪枝等来实现。
三、模型压缩模型压缩是另一种提高对话生成速度和效率的方法。
通过对模型进行压缩,可以减少模型的存储空间和计算量。
例如,可以使用低精度量化技术,将模型参数从32位浮点数转换为16位浮点数或更低精度的整数,从而减小模型的体积和计算成本。
四、分布式训练由于ChatGPT模型参数众多,传统的单机训练往往效率较低。
而使用分布式训练技术可以将训练任务划分为多个子任务,并行地在多个计算节点上进行计算,从而加快训练速度。
同时,分布式训练还能够利用大规模的计算资源,提高对话生成模型的效率。
五、缓存技术缓存技术是一种提高对话生成速度和效率的有效方法。
可以将已经生成的对话结果进行缓存,下次遇到相似的对话时,直接从缓存中获取结果,而无需重新生成。
这样可以减少计算量和生成时间,提高对话系统的实时性。
六、多模型协同对于某些特定领域的对话生成任务,可以考虑使用多模型协同的方法来提高生成速度和效率。
可以将ChatGPT模型与其他特定任务模型进行结合,各承担不同的生成任务,从而减少每个模型的计算负载,提高整体的生成效率。
七、知识图谱应用与知识图谱相结合也是提高对话生成效率的一种方式。
CHATGPT的模型微调和优化

CHATGPT的模型微调和优化近年来,自然语言处理(Natural Language Processing,NLP)领域取得了长足的发展,而CHATGPT作为其中的一种重要技术,已经成为了众多语言生成任务中的佼佼者。
然而,它仍然存在一些问题,如生成不准确、模型倾向性以及缺乏可控性等。
为了解决这些问题,研究人员提出了一些方法来微调和优化CHATGPT的模型。
1. 微调CHATGPT模型微调是指在预先训练的CHATGPT模型上进行较小规模的训练,使其适应特定的任务或领域。
通过微调,模型可以在特定任务上获得更好的表现。
一般而言,微调CHATGPT模型需要以下步骤:(1)数据集准备:根据任务需求,收集和整理与任务相关的文本数据。
(2)模型初始化:使用预先训练好的CHATGPT模型来初始化微调模型。
(3)微调过程:将准备好的数据集输入微调模型,通过反向传播和梯度下降等优化算法进行训练。
(4)性能评估:使用评估指标来衡量微调模型在特定任务上的表现,并进行调整和优化。
2. 优化CHATGPT模型除了微调外,还可以通过一些优化方法来改进CHATGPT模型的性能。
以下是一些常见的优化方法:(1)增加训练数据:通过增加训练数据的数量和多样性,可以提升CHATGPT模型的泛化能力和生成效果。
(2)正则化方法:如Dropout、L1/L2正则化等,可以减轻过拟合问题,提高模型的鲁棒性。
(3)模型架构优化:通过调整模型结构和参数设置,如层数、注意力机制等,来改善CHATGPT模型的性能。
(4)对抗训练:引入对抗训练的思想,通过训练一个生成模型和一个判别模型相互博弈,来提高CHATGPT模型的生成质量。
(5)知识蒸馏:将一个复杂的CHATGPT模型的知识传递给一个较小的模型,以达到在性能上接近大模型的效果。
3. 模型的倾向性和可控性处理CHATGPT模型在生成文本时往往存在倾向性,即对某些观点或言论偏向于生成。
为了提高模型的中立性和可控性,在微调和优化过程中可以采取以下策略:(1)数据集平衡:在微调阶段,采用平衡的数据集来保持模型对各类别的观点和言论的中立性。
如何进行ChatGPT模型的训练与调优

如何进行ChatGPT模型的训练与调优聊天生成模型(ChatGPT)是一种用于自动对话生成的人工智能模型。
它基于GPT(生成式预训练)架构,通过大量的文本数据训练而成,可以生成逼真的对话响应。
本文将介绍如何进行ChatGPT模型的训练与调优,帮助读者更好地利用这一强大工具。
一、准备工作在开始训练ChatGPT模型之前,我们需要准备一些基本的工作:1. 数据收集:收集用于模型训练的对话数据。
可以从论坛、社交媒体、聊天记录等多渠道获取。
确保数据的质量和多样性,以提高模型的表现能力。
2. 数据清理:对收集到的数据进行清洗和预处理。
删除重复数据、排除无关对话以及修复错误的语法和拼写。
3. 数据划分:将清理后的数据划分成训练集、验证集和测试集。
通常采用80%的数据作为训练集,10%用于验证,10%用于测试。
4. 环境设置:安装和配置相关的开发工具和库,如Python、TensorFlow等。
确保系统的运行环境正常,并且具备足够的计算资源。
二、数据预处理在进行ChatGPT模型的训练之前,我们需要对数据进行一些预处理,以使其适合于模型的训练要求。
以下是一些常见的数据预处理方法:1. 分词:将对话数据分解为单词或标记,以便模型能够理解并学习语言结构。
可以使用自然语言处理工具包(如NLTK)进行分词处理。
2. 标记化:将分词后的数据转换为模型能够理解的标记格式。
可以使用编码器(如BERT)将每个单词映射为唯一的标记ID。
3. 填充和截断:由于对话的长度不一,我们需要将数据进行填充或截断,以便保持输入数据的大小一致。
可以根据最大长度设置填充或截断的策略。
三、模型训练完成数据预处理后,我们可以开始训练ChatGPT模型了。
以下是一些常见的模型训练步骤:1. 模型选择:选择适合的预训练模型作为基础模型。
可以使用已经存在的模型,如GPT-2,或者从头开始训练一个全新的模型。
2. 模型配置:根据预训练模型的要求,配置模型的超参数,如学习率、批大小、训练轮数等。
ChatGPT模型的参数调整和优化方法

ChatGPT模型的参数调整和优化方法1. 引言ChatGPT是一种基于深度学习的对话生成模型,它可以自动生成以人工智能形式回答用户提出的问题或进行对话。
随着ChatGPT模型的普及和使用,研究人员一直在努力优化模型的参数以提高其性能。
本文将探讨ChatGPT模型的参数调整和优化方法。
2. 模型参数介绍ChatGPT模型有许多参数,对这些参数进行调整和优化可以显著提高模型的表现。
我们首先介绍一些常见的参数。
2.1. 学习率学习率决定了模型在每次迭代中要更新参数的程度。
较高的学习率可以加快收敛速度,但可能会导致模型在优化过程中跳过最优解;而较低的学习率可以稳定训练过程,但收敛速度会减慢。
选择适当的学习率对于ChatGPT模型的训练非常重要。
2.2. 批量大小批量大小决定了在每次参数更新时一次训练的样本数目。
较大的批量大小可以加快训练速度,但可能会导致模型过度拟合;而较小的批量大小可以减少内存占用,但训练速度会减慢。
需要根据数据集的大小和模型的复杂程度来选择适当的批量大小。
2.3. 隐层维度隐层维度决定了模型的隐藏层神经元数量。
较大的隐层维度可以提供更多的模型容量,但可能会导致过拟合;而较小的隐层维度则可能限制模型的表达能力。
合理选择隐层维度可以平衡模型的性能和过拟合的风险。
3. 参数调整方法为了调整和优化ChatGPT模型的参数,可以采用以下方法。
3.1. 网格搜索网格搜索是一种常用的调参方法,通过遍历预定义的参数空间来搜索最佳参数组合。
对于ChatGPT模型,可以通过调整学习率、批量大小和隐层维度来执行网格搜索。
通过评估不同参数组合的模型性能,可以找到最佳的参数组合。
3.2. 随机搜索随机搜索是一种与网格搜索类似的调参方法,但参数组合是随机选择的。
相比于网格搜索,随机搜索可以更快地探索参数空间。
对于ChatGPT模型,可以通过随机选择不同的学习率、批量大小和隐层维度来执行随机搜索。
通过评估随机选择的参数组合的模型性能,可以找到最佳的参数组合。
ChatGPT技术的训练和调整策略

ChatGPT技术的训练和调整策略ChatGPT是一种基于人工智能的对话生成模型,它可以根据给定的输入生成连贯的对话回复。
这项技术的背后拥有庞大的训练模型和调整策略,让我们一起探索一下。
ChatGPT的训练过程是通过海量的对话数据进行的。
这些对话数据来自真实的对话记录、公开可用的对话数据集以及从互联网上筛选出的对话片段。
这不仅包括了正式的对话,还包括了非正式的聊天,以使ChatGPT能够产生更加自然、流畅的回复。
这些数据被处理和清洗,以去除可能存在的敏感信息和不适当的内容,确保模型的输出符合道德和社会准则。
训练过程中最重要的组成部分之一是预训练。
在预训练阶段,ChatGPT被暴露给大量的对话数据,通过学习这些数据的特征和模式来提高其回复的一致性和准确性。
预训练使用了一个叫做Transformer的神经网络结构,它能够捕捉到输入之间的语义关系,并预测下一个合理的回复。
除了预训练之外,ChatGPT还需要进行微调。
微调过程是在特定任务和数据集上进行的,以使ChatGPT能够更好地适应特定领域的对话需求。
例如,如果我们希望ChatGPT用于医疗助手或客服机器人,我们可以使用医疗领域的对话数据对模型进行微调,以使其更好地理解与医疗相关的问题和回答。
微调过程通常包括两个步骤:首先是执教阶段,用一小部分训练集进行训练,评估模型在这个小样本上的表现;然后是微调阶段,根据执教阶段的反馈和指导,将模型应用于更大规模的训练集。
这样做的目的是引导模型逐步调整和改进其回复的质量和适应性。
调整ChatGPT的应答特性也是非常重要的。
在训练过程中,我们可以通过调整不同的超参数来影响模型的输出质量。
例如,我们可以调整温度参数,控制生成回答的多样性。
较低的温度值会使输出偏向于更加确定性和一致性的回答,而较高的温度值则会产生更多的随机性和变化性。
此外,正则化技术也可以用于优化ChatGPT的生成结果。
例如,我们可以使用稳定向量自增模块(nucleus sampling)来限制模型生成的单词选择,以避免生成不相关或不准确的回答。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
l wi ai
(l−1)
)
(l−1)
(6.10)
i=1
=
(l−1) n∑
l Var(wi ) Var(ai
) ).
(6.11) (6.12)
i=1 l = n(l−1) Var(wi ) Var(ai (l−1)
l 也就是说, 输入信号的方差在经过该神经元后被放大或缩小了 n(l−1) Var(wi ) 倍。
[0, 1] 或 [−1, 1] 之间: x ˆ(i) = x(i) − min(x) , max(x) − min(x) (6.4)
其中,min(x) 和 max(x) 分别为这一维特征在所有样本上的最小值和最大值。 PCA 使用 PCA (Principal Component Analysis) 方法可以去除掉各个成分 之间的相关性。
标准归一化
标准归一化也叫 z-score 归一化,来源于统计上的标准分数。将每
一个维特征都处理为符合标准正态分布(均值为 0,标准差为 1) 。假设有 N 个
邱锡鹏:《神经网络与深度学习》
95
https://nndl.github.io/
96
第六章
网络正则化与优化
w2
w2
w1
w1
(a) 未归一化数据的梯度
邱锡鹏:《神经网络与深度学习》
96
https://nndl.github.io/
6.3 批量归一化
97
原始数据
标准归一化
PCA 白化
图 6.2: 数据归一化示例 0.4 训练集 测试集
0.3
0.2
0.1
0 −4
−2
0
2
4
6
8
图 6.3: 协变量偏移。
6.3
批量归一化
在传统机器学习中,一个常见的问题的协变量偏移(Covariate Shift) 。协 变量是一个统计学概念,是可能影响预测结果的变量。在机器学习中,协变量 可以看作是输入变量。一般的机器学习算法都要求输入变量在训练集和测试集 上的分布是相似的。如果不满足这个要求,这些学习算法在测试集的表现会比 较差。 在多层的神经网络中,中间某一层的输入是其前面网络的输出。因为前面 网络的参数在每次迭代时也会被更新,而一旦这些参数变化会造成这一个中间 层的输入也发生变化, 其分布往往会和参数更新之前差异比较大。 换句话说, 从 这一个中间层开始, 之后的网络参数白学了, 需要重新学习。 这个中间层的深度
l 假设 wi 和 ai (l−1)
都是相互独立,并且均值都为 0,则 a 的均值为 (6.9)
n d ∑ ∑ (l−1) l (l−1) E (a ) = E ( wi ai )= E (wi )E (ai ) = 0. l i=1 i=1
al 的方差为 Var(a ) = Var(
l
(l−1) n∑
(6.6)
6 . nl−1 + nl
(6.7)
假设第 l 层的一个隐藏层神经元 z l ,其接受前一层的 nl−1 个神经元的输出
(l−1) ai ,i
∈ [1, n(l−1) ], zl =
n ∑ i=1 l wi ai (l−1)
(6.8)
为了避免初始化参数使得激活值变得饱和,我们需要尽量使得 z l 处于激 活函数的线性区间,也就是其绝对值比较小的值。这时,该神经元的激活值为 al = f (z l ) ≈ z l 。
然后,将特征 x(i) 减去均值,并除以标准差,得到新的特征值 x ˆ(i) 。 x ˆ(i) = x(i) − µ , σ (6.3)
这里,σ 不能为 0。如果标准差为 0,说明这一维特征没有任务区分性,可以直 接删掉。 在标准归一化之后,每一维特征都服从标准正态分布。 缩放归一化 另外一种非常简单的归一化是通过缩放将特征取值范围归一到
第六章
网络正则化与优化
因为深度神经网络的表达能力很强,所以很容易产生过拟合。另外,大量 的参数会导致训练比较慢。在训练深度神经网络时,同时也需要掌握一定的技 巧。目前,人们在大量的实践中总结了一些经验技巧,可以从以下几个方面来 提高学习效率并得到一个好的网络模型:1)数据增强;2)数据预处理;3)网 络参数初始化;4)正则化;5)超参数优化等。
https://nndl.github.io/
100 Xavier 初始化方法
第六章
网络正则化与优化
Glorot and Bengio [2010] 提出一个初始化方法,参数可
以在区间 [−r, r] 内采用均匀分布进行初始化。 对于 logistic 函数,第 l − 1 到 l 层的权重, √ 6 , r= nl−1 + n1 这里 nl 是第 l 层神经元个数,nl−1 是第 l − 1 层神经元个数。 对于 tanh 函数, r=4 √
6.2 数据预处理
95
6.2
数据预处理
一般而言,原始的训练数据中,每一维特征的来源以及度量单位不同,会 造成这些特征值的分布范围往往差异很大。当我们计算不同样本之间的欧式距 离时,取值范围大的特征会起到主导作用。这样,对于基于相似度比较的机器 学习方法(比如最近邻分类器) ,必须先对样本进行预处理,将各个维度的特征 归一化到同一个取值区间,并且消除不同特征之间的相关性,才能获得比较理 想的结果。虽然神经网络可以通过参数的调整来适应不同特征的取值范围,但 是会导致训练效率比较低。 假设一个只有一层的网络 y = tanh(w1 x1 + w2 x2 + b),其中 x1 ∈ [0, 10], x2 ∈ [0, 1]。之前我们提到 tanh() 的导数在区间 [−2, 2] 上是敏感的,其余的导数 接近于 0。因此,如果 w1 x1 + w2 x2 + b 过大或过小,都会导致梯度过小,难以 训练。为了提高训练效率,我们需要使 w1 x1 + w2 x2 + b 在 [−2, 2] 区间,我们需 要将 w1 设得小一点,比如在 [−0.1, 0.1] 之间。可以想象,如果数据维数很多时, 我们很难这样精心去选择每一个参数。因此,如果每一个特征的取值范围都在 相似的区间,比如 [0, 1] 或者 [−1, 1],我们就不太需要区别对待每一个参数,减 少人工干预。 除了参数初始化之外,不同特征取值范围差异比较大时还会梯度下降法的 搜索效率。图6.1给出了数据归一化对梯度的影响。其中,图6.1a为未归一化数 据的等高线图。取值范围不同会造成在大多数位置上的梯度方向并不是最优的 搜索方向。当使用梯度下降法寻求最优解时,会导致需要很多次迭代才能收敛。 如果我们把数据归一化为取值范围相同,如图6.1b所示,大部分位置的梯度方 向近似于最优搜索方向。这样,在梯度下降求解时,每一步梯度的方向都基本 指向最小值,训练效率会大大提高。 归一化的方法有很多种,比如之前我们介绍的 sigmoid 型函数等都可以将 不同取值范围的特征挤压到一个比较受限的区间。这里,我们介绍几种在神经 网络中经常使用的归一化方法。
邱锡鹏:《神经网络与深度hub.io/
6.4 参数初始化
99
算法 6.1: 批量归一化 输入: 一次 mini-batch 中的所有样本集合: B = {x(i) }, i = 1, · · · , m; 参数:γ , β ;
1 2
for k = 1 · · · K do
2 当训练完成时,用整个数据集上的均值 µk 和方差 σk 来分别代替 µB,k 和方 2 差 σB ,k 。
(6.5) √ σ [xk ],βk = µ[xk ] 时,yk
通过每一层的归一化,从而减少前面网络参数更新对后面网络输入带来的 内部协变量偏移问题,提高训练效率。
6.4
参数初始化
神经网络的训练过程中的参数学习是基于梯度下降法进行优化的。梯度下 降法需要在开始训练时给每一个参数赋一个初始值。这个初始值的选取十分关 键。在感知器和 logistic 回归的训练中,我们一般将参数全部初始化为 0。但是 这在神经网络的训练中会存在一些问题。因为如果参数都为 0,在第一遍前向 计算时,所有的隐层神经元的激活值都相同。这样会导致深层神经元没有区分 性。这种现象也称为对称权重现象。 为了打破这个平衡,比较好的方式是对每个参数都随机初始化,这样使得 不同神经元之间的区分性更好。
µB,k =
2 σB ,k
1 ∑ (i) x , m i=1 k
m m
// mini-batch 均值 //mini-batch 方差 //归一化 //缩放和平移
1 ∑ (i) = (x − µB,k )2 . m i=1 k
(i)
xk − µB,k (i) , ∀i x ˆk = √ 2 σB ,k + ϵ
(b) 归一化数据的梯度
图 6.1: 数据归一化对梯度的影响。 样本 {x(i) }, i = 1, · · · , N ,对于每一维特征 x,我们先计算它的均值和标准差: µ= σ2 =
N 1 ∑ (i) x , N i=1 N 1 ∑ (i) (x − µ)2 . N i=1
(6.1)
(6.2)
3
yk = γ x ˆk + β ≡ BNγ,β (x(i) ), ∀i end 输出: {y (i) = BNγ,β (x(i) )}
(i)
(i)
4
但是一个问题是如何选取随机初始化的区间呢?如果参数太小,会导致神 经元的输入过小。经过多层之后信号就慢慢消失了。参数过小还会使得 sigmoid 型激活函数丢失非线性的能力。以 logistic 函数为例,在 0 附近基本上是近似线 性的。这样多层神经网络的优势也就不存在了。如果参数取得太大,会导致输 入状态过大。对于 sigmoid 型激活函数来说,激活值变得饱和,从而导致梯度接 近于 0。 因此,如果要高质量地训练一个网络,给参数选取一个合适的初始化区间 是非常重要的。经常使用的初始化方法有以下几种: