前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习中的正则化技术(附Python代码)

深度学习中的正则化技术(附Python代码)

作者头像
数据派THU
发布于 2018-07-30 01:58:25
发布于 2018-07-30 01:58:25
1.7K00
代码可运行
举报
文章被收录于专栏:数据派THU数据派THU
运行总次数:0
代码可运行

作者:SHUBHAM JAIN

翻译:和中华

校对:丁楠雅

本文约3500字,建议阅读20分钟。

本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个案例。

简介

数据科学家面临的常见问题之一是如何避免过拟合。你是否碰到过这样一种情况:你的模型在训练集上表现异常好,却无法预测测试数据。或者在一个竞赛中你排在public leaderboard的顶端,但是在最终排名中却落后了几百名?那么这篇文章就是为你而准备的!

(译者注: 在kaggle这样的数据竞赛中, public leaderboard排名是根据一部分测试集来计算的,用于给选手提供及时的反馈和动态展示比赛的进行情况;而private leaderboard是根据测试集的剩余部分计算而来,用于计算选手的最终得分和排名。 通常我们可以把public LB理解为在验证集上的得分,private LB为真正未知数据集上的得分,这样做的目的是提醒参赛者,我们建模的目标是获取一个泛化能力好的模型)

避免过拟合可以提高我们模型的性能。

目录

1. 什么是正则化?

2. 正则化如何减少过拟合?

3. 深度学习中的各种正则化技术:

  • L2和L1正则化
  • Dropout
  • 数据增强(Data augmentation)
  • 提前停止(Early stopping)

4. 案例:在MNIST数据集上使用Keras的案例研究

1. 什么是正则化?

在深入该主题之前,先来看看这几幅图:

之前见过这幅图吗?从左到右看,我们的模型从训练集的噪音数据中学习了过多的细节,最终导致模型在未知数据上的性能不好。

换句话说,从左向右,模型的复杂度在增加以至于训练误差减少,然而测试误差未必减少。如下图所示:

Source: Slideplayer

如果你曾经构建过神经网络,你就知道它们有多复杂。这也使得它们更容易过拟合。

正则化技术是对学习算法做轻微的修改使得它泛化能力更强。这反过来就改善了模型在未知数据上的性能。

2. 正则化如何减少过拟合?

我们来看一个在训练数据上过拟合的神经网络,如下图所示:

如果你曾经学习过机器学习中的正则化,你会有一个概念,即正则化惩罚了系数。在深度学习中,它实际上惩罚了节点的权重矩阵。

假设我们的正则化系数很高,以至于某些权重矩阵近乎于0:

这会得到一个简单的线性网络,而且在训练数据集上轻微的欠拟合。

如此大的正则化系数并不是那么有用。我们需要对其进行优化从而得到一个拟合良好的模型,正如下图所示:

3. 深度学习中的各种正则化技术

我们已经理解了正则化如何帮助减少过拟合,现在我们将学习一些把正则化用于深度学习的技术。

  • L1和L2正则化

L1和L2是最常见的正则化类型。它们通过增加一个被称为正则项的额外项来更新成本函数:

Cost function = Loss (say, binary cross entropy) + Regularization term

由于增加了这个正则项,权重矩阵的值减小了,因为这里假定了具有较小权重矩阵的神经网络会导致更简单的模型。因此,它也会在相当程度上减少过拟合。

然而,该正则项在L1和L2中是不同的。

L2中,我们有:

这里,lambda是正则参数。它是一个超参数用来优化得到更好的结果。L2正则化也叫权重衰减(weight decay),因为它强制权重朝着0衰减(但不会为0)

在L1中,我们有:

这里,我们惩罚了权重的绝对值。不像L2, 这里的权重是有可能衰减到0的。因此,当我们想压缩模型的时候, L1非常有用,否则会偏向使用L2.

在Keras中,我们可以使用regularizers直接在任意层上应用正则化。

下面是一段样例代码,把L2正则化用于一层之上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras import regularizers
model.add(Dense(64, input_dim=64,
                kernel_regularizer=regularizers.l2(0.01)

注意:这里的值0.01是正则化参数的值,即lambda, 它需要被进一步优化。可以使用grid-search的方法来优化它。

同样的,我们也可以采用L1正则化。后文中的案例研究会看到更多细节。

  • Dropout

这是一种非常有趣的正则化技术。它的效果非常好因此在深度学习领域中最常被使用。

为了理解dropout,假设我们的神经网络结构如下所示:

dropout做什么呢?每次迭代,随机选择一些节点,将它们连同相应的输入和输出一起删掉,如下图:

所以,每一轮迭代都有不同的节点集合,这也导致了不同的输出。它也可以被认为是一种机器学习中的集成技术(ensemble technique)。

集成模型(ensemble models)通常比单一模型表现更好,因为捕获了更多的随机性。同样的,比起正常的神经网络模型,dropout也表现的更好。

选择丢弃多少节点的概率是dropout函数的超参数。如上图所示,dropout可以被用在隐藏层以及输入层。

由于这些原因,当我们有较大的神经网络时,为了引入更多的随机性,通常会优先使用dropout。

在Keras中,可以使用Keras core layer来实现dropout。下面是对应的Python代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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'),
 ])

正如你看到的,这里定义丢弃概率为0.25。我们可以使用grid search方法来微调它以获得更好的结果。

  • 数据增强(Data augmentation)

减少过拟合最简单的方式其实是增加训练集的大小。在机器学习中,由于人工标注数据成本过高所以很难增加训练集的大小。

但是,考虑一下如果我们处理的是图像。在这种情况下,有一些方法可以增加训练集的大小——旋转、翻转、缩放、移动等等。下图中,对手写数字数据集进行了一些转换:

这种技术叫做数据增强。通常会明显改善模型的准确率。为了提高模型预测能力,这种技术可以被视为一种强制性技巧。

在Keras中,我们使用ImageDataGenerator来执行所有这些转换。它有一大堆参数,你可以用它们来预处理你的训练数据。

下面是示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(horizontal flip=True)
datagen.fit(train)
  • 提前停止(Early stopping)

提前停止是一种交叉验证的策略,即把一部分训练集保留作为验证集。当看到验证集上的性能变差时,就立即停止模型的训练。

在上图中,我们在虚线处停止模型的训练,因为在此处之后模型会开始在训练数据上过拟合。

在Keras中,使用callbacks函数来应用提前停止。下面是代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.callbacks import EarlyStopping
 
EarlyStopping(monitor='val_err', patience=5)

这里的monitor是表示需要监视的量,‘val_err’代表验证集错误.

Patience表示在该数量的epochs内没有进一步的性能改进后,就停止训练。为了更好地理解,我们再看看上面的图。在虚线之后,每个epoch都会导致一个更高的验证集错误。因此,在虚线之后的5个epoch(因为我们设置patience等于5),由于没有进一步的改善,模型将停止训练。

注意:可能在5个epoch之后(这是一般情况下为patience设定的值)模型再次开始改进,并且验证集错误也开始减少。因此,在调整这个超参数的时候要格外小心。

  • 在MNIST数据集上使用Keras的案例研究

至此,你应该对我们提到的各种技术有了一个理论上的理解。现在我们把这些知识用在深度学习实际问题上——识别数字。下载完数据集之后,你就可以开始下面的代码。首先,我们导入一些基本的库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%pylab inline
 
import numpy as np
import pandas as pd
from scipy.misc import imread
from sklearn.metrics import accuracy_score
 
from matplotlib import pyplot
 
import tensorflow as tf
import keras
 
# To stop potential randomness
seed = 128
rng = np.random.RandomState(seed)

现在,加载数据。

现在拿一些图片来看看。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 img_name = rng.choice(train.filename)
filepath = os.path.join(data_dir, 'Train', 'Images', 'train', img_name)
 
img = imread(filepath, flatten=True)
 
pylab.imshow(img, cmap='gray')
pylab.axis('off')
pylab.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#storing images in numpy arrays
temp = []
for img_name in train.filename:
 image_path = os.path.join(data_dir, 'Train', 'Images', 'train', img_name)
 img = imread(image_path, flatten=True)
 img = img.astype('float32')
 temp.append(img)
 
x_train = np.stack(temp)
 
x_train /= 255.0
x_train = x_train.reshape(-1, 784).astype('float32')
 
y_train = keras.utils.np_utils.to_categorical(train.label.values)

创建一个验证集,以便优化我们的模型以获得更好的分数。我们将采用70:30的训练集、验证集比例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
split_size = int(x_train.shape[0]*0.7)
 
x_train, x_test = x_train[:split_size], x_train[split_size:]
y_train, y_test = y_train[:split_size], y_train[split_size:]

首先,我们先建立一个具有5个隐藏层,每层500个节点的简单神经网络。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# import keras modules
from keras.models import Sequential
from keras.layers import Dense
# define vars
input_num_units = 784
hidden1_num_units = 500
hidden2_num_units = 500
hidden3_num_units = 500
hidden4_num_units = 500
hidden5_num_units = 500
output_num_units = 10
 
epochs = 10
batch_size = 128
 
model = Sequential([
 Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu'),
 Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu'),
 Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu'),
 Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu'),
 Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu'),
 
Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),
 ])

注意,我们只运行10个epoch,快速检查一下模型的性能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
 
trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

现在,我们尝试用L2正则化,并检查它是否给出了比简单神经网络更好的性能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras import regularizers
 
model = Sequential([
 Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu',
 kernel_regularizer=regularizers.l2(0.0001)),
 Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu',
 kernel_regularizer=regularizers.l2(0.0001)),
 Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu',
 kernel_regularizer=regularizers.l2(0.0001)),
 Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu',
 kernel_regularizer=regularizers.l2(0.0001)),
 Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu',
 kernel_regularizer=regularizers.l2(0.0001)),
 
Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),
 ])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
 
trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

注意这里lambda的值等于0.0001. 太棒了!我们获得了一个比之前NN模型更好的准确率。

现在尝试一下L1正则化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## l1
 
model = Sequential([
 Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu',
 kernel_regularizer=regularizers.l1(0.0001)),
 Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu',
 kernel_regularizer=regularizers.l1(0.0001)),
 Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu',
 kernel_regularizer=regularizers.l1(0.0001)),
 Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu',
 kernel_regularizer=regularizers.l1(0.0001)),
 Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu',
 kernel_regularizer=regularizers.l1(0.0001)),
 
Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),
 ])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

这次并没有显示出任何的改善。我们再来试试dropout技术。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## 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=hidden2_num_units, input_dim=hidden1_num_units, activation='relu'),
 Dropout(0.25),
 Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu'),
 Dropout(0.25),
 Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu'),
 Dropout(0.25),
 Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu'),
 Dropout(0.25),
 
Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),
 ])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

效果不错!dropout也在简单NN模型上给出了一些改善。

现在,我们试试数据增强。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(zca_whitening=True)
# loading data
train = pd.read_csv(os.path.join(data_dir, 'Train', 'train.csv'))
temp = []
for img_name in train.filename:
 image_path = os.path.join(data_dir, 'Train', 'Images', 'train', img_name)
 img = imread(image_path, flatten=True)
 img = img.astype('float32')
 temp.append(img)
 
x_train = np.stack(temp)
 
X_train = x_train.reshape(x_train.shape[0], 1, 28, 28)
 
X_train = X_train.astype('float32')

现在,拟合训练数据以便增强。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# fit parameters from data
datagen.fit(X_train)

这里,我使用了zca_whitening作为实参,它突出了每个数字的轮廓,如下图所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## splitting
y_train = keras.utils.np_utils.to_categorical(train.label.values)
split_size = int(x_train.shape[0]*0.7)
 
x_train, x_test = X_train[:split_size], X_train[split_size:]
y_train, y_test = y_train[:split_size], y_train[split_size:]
## reshaping
x_train=np.reshape(x_train,(x_train.shape[0],-1))/255
x_test=np.reshape(x_test,(x_test.shape[0],-1))/255
## structure using 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=hidden2_num_units, input_dim=hidden1_num_units, activation='relu'),
 Dropout(0.25),
 Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu'),
 Dropout(0.25),
 Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu'),
 Dropout(0.25),
 Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu'),
 Dropout(0.25),
 
Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),
 ])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

哇!我们在准确率得分上有了一个飞跃。并且好消息是它每次都奏效。我们只需要根据数据集中的图像来选择一个合适的实参。

现在,试一下最后一种技术——提前停止。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.callbacks import EarlyStopping
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test)
 , callbacks = [EarlyStopping(monitor='val_acc', patience=2)])

可以看到我们的模型在仅仅5轮迭代后就停止了,因为验证集准确率不再提高了。当我们使用更大值的epochs来运行它时,它会给出好的结果。你可以说它是一种优化epoch值的技术。

结语

我希望现在你已经理解了正则化以及在深度学习模型中实现正则化的不同技术。 无论你处理任何深度学习任务,我都强烈建议你使用正则化。它将帮助你开阔视野并更好的理解这个主题。

原文链接: https://www.analyticsvidhya.com/blog/2018/04/fundamentals-deep-learning-regularization-techniques/

译者简介

和中华,留德软件工程硕士。由于对机器学习感兴趣,硕士论文选择了利用遗传算法思想改进传统kmeans。目前在杭州进行大数据相关实践。加入数据派THU希望为IT同行们尽自己一份绵薄之力,也希望结交许多志趣相投的小伙伴。

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THU ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
ICML 2023 Workshop | Siamese SIREN:隐式神经表征的音频压缩
隐式神经表征 (INRs) 已经成为一种很有前景的表示各种数据模式的方法,包括3D形状、图像和音频。虽然最近的研究已经证明了 INRs 在图像和 3D 形状压缩方面的成功应用,但它们在音频压缩方面的潜力仍未得到充分开发。基于此,本文提出了一项关于使用 INRs 进行音频压缩的初步研究。
用户1324186
2023/09/27
5880
ICML 2023 Workshop | Siamese SIREN:隐式神经表征的音频压缩
Relu激活函数Out了?正弦周期激活函数在隐式神经表示中大显神威!
下图就是一些我们经常使用的激活函数,从这些激活函数的图像可以看出它们有的是局部线性的有的是非线性的,有的是一个函数表达式下来的,有的是分段的。但其表达式好像都不是很常见,给人一种应凑的感觉有没有?
AI科技评论
2020/07/15
2.4K0
Relu激活函数Out了?正弦周期激活函数在隐式神经表示中大显神威!
学界 | 深度神经网络为什么不易过拟合?傅里叶分析发现固有频谱偏差
众所周知,过参数化的深度神经网络(DNN)是一类表达能力极强的函数,它们甚至可以以 100% 的训练准确率记住随机数据。这种现象就提出了一个问题:为什么它们不会轻易地过度拟合真实数据?为了回答这个问题,我们使用傅立叶分析研究了深度神经网络。我们证明了具有有限权重(或者经过有限步训练)的深度神经网络天然地偏向于在输入空间上表示光滑的函数。具体而言,深度 ReLU 网络函数的一个特定频率分量(k)的大小至少以 O(k^(-2))的速率衰减,网络的宽度和深度分别以多项式和指数级别帮助网络对更高的频率建模。这就说明了为什么深度神经网络不能完全记住 delta 型的峰函数。我们的研究还表明深度神经网络可以利用低维数据流形的几何结构来用简单的函数逼近输入空间中存在于简单函数流形上的复杂函数。结果表明,被网络分类为属于某个类的所有样本(包括对抗性样本)都可以通过一条路径连接起来,这样沿着该路径上的网络预测结果就不会改变。最后,我们发现对应于高频分量的深度神经网络(DNN)参数在参数空间中所占的体积较小。
机器之心
2018/07/26
9870
学界 | 深度神经网络为什么不易过拟合?傅里叶分析发现固有频谱偏差
如何从频域的角度解释CNN(卷积神经网络)?
时域卷积=频域乘积,卷积神经网络大部分的计算也在卷积部分,如何从频域的角度思考卷积神经网络,如何从频域的角度解释ResNet。
abs_zero
2020/11/11
1.3K0
如何从频域的角度解释CNN(卷积神经网络)?
性能优于ReLU,斯坦福用周期激活函数构建隐式神经表示,Hinton点赞
这个非线性激活函数效果比 ReLU 还好?近日,斯坦福大学的一项研究《Implicit Neural Representations with Periodic Activation Functions》进入了我们的视野。这项研究提出利用周期性激活函数处理隐式神经表示,由此构建的正弦表示网络(sinusoidal representation network,SIREN)非常适合表示复杂的自然信号及其导数。
机器之心
2020/06/29
1.5K0
性能优于ReLU,斯坦福用周期激活函数构建隐式神经表示,Hinton点赞
ICML 2019 | SGC:简单图卷积网络
题目:Simplifying Graph Convolutional Networks
Cyril-KI
2022/11/17
8870
ICML 2019 | SGC:简单图卷积网络
SIREN周期激活函数
CNN强大的学习能力使其能拟合任意函数,然而这种网络架构无法对信号进行细致的建模,很难去表示信号在时域,空域的衍生信息。我们提出以「周期激活函数来表示隐式神经网络」,并「证明这些网络非常适合复杂的自然信号及其导数」。而在实验中也表明SIREN相较于其他激活函数对于音视频任务有更好的效果。
BBuf
2020/07/09
1.9K0
SIREN周期激活函数
另一个角度看神经网络回归-频域分析
神经网络模型被广泛应用在回归问题中。神经网络模型的回归精度与训练数据的分布有关。本文从训练数据的频域的角度来对该问题进行分析
绿盟科技研究通讯
2019/12/11
2K0
另一个角度看神经网络回归-频域分析
WACV 2023 | ImPosing:用于视觉定位的隐式姿态编码
标题:ImPosing:Implicit Pose Encoding for Efficient Visual Localization
3D视觉工坊
2023/04/30
3070
WACV 2023 | ImPosing:用于视觉定位的隐式姿态编码
上海交大 | 神经网络的两个简单偏好(频率原则、参数凝聚)
我是 2017 年 11 月开始接触深度学习,至今刚好五年。2019 年 10 月入职上海交大,至今三年,刚好第一阶段考核。2022 年 8 月 19 号,我在第一届中国机器学习与科学应用大会做大会报告,总结这五年的研究以及展望未来的方向。本文是该报告里关于理论方面的研究总结(做了一点扩展)。报告视频链接可以见:
ShuYini
2022/12/06
2.5K0
上海交大 | 神经网络的两个简单偏好(频率原则、参数凝聚)
深度神经网络中的数学,对你来说会不会太难?
选自MIT 机器之心编译 参与:Jane W 这是一篇讲解深度学习数学的系列文章,但并非是基础数学,还涉及到了拓扑与测度论等内容。本文为该系列文章的第一部分,机器之心会持续把后续内容全部放出。更规范
机器之心
2018/05/09
7050
深度神经网络中的数学,对你来说会不会太难?
2025最新卷积神经网络(CNN)详细介绍及其原理详解
本文详细介绍了卷积神经网络(CNN)的基础概念和工作原理,包括输入层、卷积层、池化层、全连接层和输出层的作用。通过举例和图解,阐述了CNN如何处理图像,提取特征,以及如何进行手写数字识别。此外,讨论了池化层的平移不变性和防止过拟合的重要性。 本文是关于卷积神经网络(CNN)技术教程,整体内容从基础概念到实际示例,逐层剖析 CNN 的各个组成部分与作用,并通过手写数字识别案例帮助大家更直观地理解其工作原理。
猫头虎
2025/06/08
1.4K0
2025最新卷积神经网络(CNN)详细介绍及其原理详解
NeurIPS 2023 | 神经网络图像压缩:泛化、鲁棒性和谱偏
目前,神经图像压缩(NIC)在分布内(in-distribution, IND)数据的 RD 性能和运行开销表现出了卓越的性能。然而,研究神经图像压缩方法在分布外(out-of-distribution, OOD)数据的鲁棒性和泛化性能方面的工作有限。本文的工作就是围绕以下关键问题展开的:
用户1324186
2024/01/04
5200
NeurIPS 2023 | 神经网络图像压缩:泛化、鲁棒性和谱偏
Tacotron2论文阅读
这篇论文描述了Tacotron 2, 一个直接从文本合成语音的神经网络架构。系统由两部分构成,一个循环seq2seq结构的特征预测网络,把字符向量映射为梅尔声谱图,后面再接一个WaveNet模型的修订版,把梅尔声谱图合成为时域波形。我们的模型得到了4.53的平均意见得分(MOS),专业录制语音的MOS得分是4.58。为了验证模型设计,我们对系统的关键组件作了剥离实验研究,并且评估了使用梅尔频谱替代语言学、音长和F0特征作为WaveNet输入带来的不同影响。我们进一步展示了使用紧凑的声学中间表征可以显著地简化WaveNet架构
mathor
2020/08/13
1.6K0
90后华裔教授一年连发三篇Nature子刊!首个量子神经网络QuantumFlow开源
---- 新智元报道   作者:姜炜文 编辑:好困 【新智元导读】近日,华裔教授姜炜文再获量子计算革命性突破,在QuantumWeek上开源了首个量子神经网络设计栈,加速了神经网络在量子计算机上的发展。 神经网络是当下计算应用中发展最快,使用最广的机器学习算法。然而,随着应用不断复杂化导致网络结构不断扩大,存储性能瓶颈已逐渐凸显。 在传统计算平台上,N个数字比特只能表示1个N位数据,然而在量子计算中,M个量子比特却同时能表示2^M个数据,并能同时操作这些数据。 量子计算机如此强大的存储与计算能力,使其
新智元
2023/05/22
3360
90后华裔教授一年连发三篇Nature子刊!首个量子神经网络QuantumFlow开源
一位上海交大教授的深度学习五年研究总结
我是2017年11月开始接触深度学习,至今刚好五年。2019年10月入职上海交大,至今三年,刚好第一阶段考核。2022年8月19号,我在第一届中国机器学习与科学应用大会做大会报告,总结这五年的研究以及展望未来的方向。本文是该报告里关于理论方面的研究总结(做了一点扩展)。报告视频链接可以见:https://www.bilibili.com/video/BV1eB4y1z7tL/
黄博的机器学习圈子
2022/11/07
9000
一位上海交大教授的深度学习五年研究总结
既是自编码器,也是RNN,DeepMind科学家八个视角剖析扩散模型
如果你尝试过目前最火的 AI 绘画工具之一 Stable Diffusion,那你就已经体验过扩散模型(diffusion model)那强大的生成能力。但如果你想更进一步,了解其工作方式,你会发现扩散模型的形式其实有很多种。
机器之心
2023/09/08
5710
既是自编码器,也是RNN,DeepMind科学家八个视角剖析扩散模型
图神经网络 GNN GAT & GCN(一)
知乎: https://www.zhihu.com/people/gong-jun-min-74
zenRRan
2020/04/21
3.6K0
图神经网络 GNN GAT & GCN(一)
最基本的25道深度学习面试问题和答案
近年来,对深度学习的需求不断增长,其应用程序被应用于各个商业部门。各公司现在都在寻找能够利用深度学习和机器学习技术的专业人士。在本文中,将整理深度学习面试中最常被问到的25个问题和答案。如果你最近正在参加深度学习相关的面试工作,那么这些问题会对你有所帮助。
deephub
2022/11/11
9840
最基本的25道深度学习面试问题和答案
解读 | 如何从信号分析角度理解卷积神经网络的复杂机制?
机器之心原创 作者:Qintong Wu 参与:Jane W 随着复杂和高效的神经网络架构的出现,卷积神经网络(CNN)的性能已经优于传统的数字图像处理方法,如 SIFT 和 SURF。在计算机视觉领域,学者们开始将研究重点转移到 CNN,并相信 CNN 是这一领域的未来趋势。但是,人们对成效卓著的 CNN 背后的机理却缺乏了解。研究 CNN 的运行机理是当今一个热门话题。基本上,有三种主流观点:1>优化、2>近似、3>信号。前两种观点主要集中在纯数学分析,它们试图分析神经网络的统计属性和收敛性,而第三种观
机器之心
2018/05/07
8570
解读 | 如何从信号分析角度理解卷积神经网络的复杂机制?
推荐阅读
相关推荐
ICML 2023 Workshop | Siamese SIREN:隐式神经表征的音频压缩
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档