Deep Learning 优化小结

本文介绍了深度学习中的优化方法,包括预训练与微调策略、单隐藏层神经网络的训练方法及参数调整技巧,并探讨了Hinton提出的Dropout技术及其在不同任务上的应用效果。
部署运行你感兴趣的模型镜像

胡乱写一点,做个记录;不保证可读性。


Hinton 06 年的 A fast learning algorithm for deep belief nets首先提出了 pre-training + fine-tuning的优化 deep network的方法策略;

mutil-layer network多年前就提出,但优化一直是个问题;非凸且参数巨多, 单隐藏层NN的优化算法Backpropagation Algorith往往得不到较好的局部最优解;

pre-training 往往能够得到比较接近局部最优解的初始迭代点,然后使用fine-tuning来微调pre-training得到的参数。

pre-training是一种策略,不是具体的优化方法。pre-training使用无监督学习来训练一个单隐藏层NN,输入输出相同。从而学习到参数,然后保留第一层;递归进行多次。最后使用 有监督学习来trian一下 feature-label的参数,可以使用sigmoid/softmax regression等。

单隐藏层NN Autoencoder/Sparse Autoencoder等;另 RBM等。

RBM 用Hinton 02年的一篇文章提出的方法来trian 基本思想是 极大似然的时候不断抬高下界 做个两三层即可


单隐藏层NN 的训练方法有 梯度下降(GD)/随机梯度下降(SGD)/mini-Batch GD/L-BFGS/共轭梯度(CG)

其实单隐藏层 一般不需要这么多方法, 但是Deep Learning往往需要 大量的训练数据 才能刻画数据的分布,所以需要 优化技巧来提高训练速度。

这里有许多参数要调  比如Sparse Autoencoder如果使用KL-熵来做优化的目标函数 就需要选择 优化比例lambda等

GD/SGD中需要调节 learning rate 尤其是SGD;mini-Batch除步长外 还需调节 batchsize epoch等参数/L-BFGS 如果内存占用太多 还需调节选用个数的参数。

此外优化 还有添加 动量 or 平均随机梯度的方法等。


fine-tuning也是用 SGD/LBFGS/CG来微调各层参数,但是这种微调 其实对底层的参数影响比较小,多半调在了最上层的参数上;不同的task 会带来不同的微调效果 尽管他们使用相同的pre-training


近来,Hinton 还提出 使用 dropout的技术来trian,有点 Denoise Autoencoder的意思;Bengio顺带搞出来 maxout等技术。

Ng组 11年 有篇文章——On Optimization Methods for Deep Learning分析了SGD/L-BFGS/CG


华盛顿大学的 Pedro-Domingos等 提出的 Sum-Product Networks的优化 完全不是上面套路,reuse很多中间结果,据说训练很快 没细看

关于优化等问题 可以参考    部分章节

Neural Networks: Tricks of the Trade

Second Edition

Deep Learning在图像上 为了克服图像尺寸、平移、旋转等的问题会使用 patch/convolution-pooling等技术

早期Deep learning 基本用在了图像/语音的分类问题和提取特征上,近年有拓展应用领域的趋势:图像分割/图像检索等。


我也用 Stacked (Sparse) Autoencoder/Convolution NN等 在MNIST上做了一些实验,基本在 97.5%+的正确率上,更高的准确率,可以通过增加训练参数(旋转图像/平移图像等)、数据的预处理(白化等)、更细致的调参数、更换模型等来提高。







您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

### MATLAB GUI 人脸识别实现方法 MATLAB 提供了强大的工具箱和函数,用于实现图形用户界面(GUI)和图像处理功能。在 MATLAB 中使用 GUI 进行人脸识别的主要步骤包括数据预处理、特征提取、分类器训练以及结果展示。以下是对 MATLAB GUI 人脸识别实现方法的总结[^1]。 #### 数据预处理 在进行人脸识别之前,需要对图像进行预处理,以确保输入数据的质量。这通常包括灰度化、归一化、裁剪和调整大小等操作。MATLAB 的 `imread` 函数可以读取图像,而 `rgb2gray` 函数可以将彩色图像转换为灰度图像。此外,`imresize` 函数可用于调整图像大小以适应模型的需求[^2]。 ```matlab % 示例代码:读取并预处理图像 img = imread('face.jpg'); % 读取图像 grayImg = rgb2gray(img); % 转换为灰度图像 resizedImg = imresize(grayImg, [100, 100]); % 调整大小 imshow(resizedImg); % 显示图像 ``` #### 特征提取 特征提取是人脸识别的关键步骤之一。常用的方法包括主成分分析(PCA)、线性判别分析(LDA)以及深度学习中的卷积神经网络(CNN)。MATLAB 提供了 `pca` 函数来实现 PCA,并且可以通过 Deep Learning Toolbox 使用 CNN 模型[^3]。 ```matlab % 示例代码:使用 PCA 进行特征提取 coeff = pca(double(resizedImg(:))); % 对图像进行 PCA 分析 disp(coeff); % 显示 PCA 系数 ``` #### 分类器训练 在提取特征后,需要训练一个分类器以识别人脸。常见的分类器包括支持向量机(SVM)、K 最近邻(KNN)和神经网络。MATLAB 的 Statistics and Machine Learning Toolbox 提供了这些分类器的实现[^4]。 ```matlab % 示例代码:使用 SVM 进行分类 labels = [1; 2; 3]; % 假设三类人脸标签 features = rand(3, 100); % 随机生成特征矩阵 svmModel = fitcsvm(features, labels); % 训练 SVM 模型 predictedLabel = predict(svmModel, features(:, 1)); % 预测标签 disp(predictedLabel); % 显示预测结果 ``` #### GUI 设计 MATLAB 的 GUIDE(Graphical User Interface Development Environment)工具可以用来设计和开发 GUI。通过拖放组件(如按钮、文本框和图像显示区域),可以创建一个用户友好的界面。在 GUI 中集成人脸识别功能时,需要将上述步骤封装到回调函数中[^5]。 ```matlab % 示例代码:GUI 回调函数 function pushbutton1_Callback(hObject, eventdata, handles) % 用户点击按钮时触发的回调函数 img = imread(uigetfile({'*.jpg'; '*.png'}, '选择图像')); grayImg = rgb2gray(img); resizedImg = imresize(grayImg, [100, 100]); set(handles.axes1, 'CData', resizedImg); % 在 GUI 中显示图像 end ``` #### 总结 MATLAB GUI 人脸识别的实现涉及多个步骤,包括数据预处理、特征提取、分类器训练以及 GUI 设计。每个步骤都可以利用 MATLAB 提供的内置函数和工具箱来完成。通过合理的设计和优化,可以构建一个高效的人脸识别系统[^6]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值