首页 > 其他分享 >Neural Network 初学

Neural Network 初学

时间:2023-07-30 09:56:36浏览次数:33  
标签:layer Network Neural dfrac dy 初学 channel 梯度 向量

参数:机器学习的内容

超参数:人手动设置的数值,比如学习率、训练轮数

MLP

在 input layer 和 output layer 之间有一堆 hidden layer,每两层之间可以理解成一张完全二分图,二分图的邻接矩阵上有一些权重,随机初始化。

将图片的每个像素点抽出来变成向量之后在二分图上矩阵乘法得到第一层的结果,对这个结果向量每个数变换一下,常用的变换有 ReLU:和 0 取 \(\max\)

最后得到一个长度为 output layer 大小的一维向量。比如在 MNIST 数据集里面就是 \([10,1]\) 大小的向量。向量里面每个数字再做一个 softmax 变换使得其总和为 1,于是第 \(i\) 的数字就表示它是 \(i\) 的概率。

训练集里面每个数字都标注了分类,或者说黑盒应该输出的向量是一个大小为 \([10,1]\) 的向量,只有一个数字为 \(1\)。那么根据差值进行反向传播。

反向传播主要是考虑链式法则。最开始的损失函数是 |output_layer| 元函数,记作 \(F(x_1,\dots x_m)\)。\(\dfrac{d F}{d x_i}\) 可以根据定义计算。

记倒数第二层的数据为 \(y_1\dots y_n\) 那么根据链式法则 \(\dfrac{d F}{dy_j}=\dfrac{dF}{dx_i}\dfrac{dx_i}{dy_j}\)

根据矩阵乘法的定义,\(x_i\) 可以看成关于 \(y_1\dots y_n\) 的 \(n\) 元函数(\(x_i\sum\limits_{j=1}^n y_jw_{j,i}\))

有激活函数的情况就是 \(\dfrac{dF}{dy_i}=\dfrac{dF}{dy'_ {i}} \dfrac{d y'_ {i}}{d y_i}\) 由于 \(y'_ i=f(y_i)\) 中的 \(f\) 已知,那么导数也就行了。

你如果理解到这是一个有向图上跑链式法则就可以了

此时让 \(w_{i,j}\) 加上 \(w_{i,j}\times\) learning rate \(\times \dfrac{d F(x_j)}{d y_i}\) 就行了

一些可能存在的问题:

  • 过拟合:神经网络过于复杂,直接把图片信息背过了,通过矩阵乘法维护了出来。

  • 梯度消失:因为在反向传播过程中,参数是要损失函数变化最大的方向逆过来更改,找不到梯度(梯度几乎为 0 )那么就是参数消失

  • 梯度爆炸:梯度太大,变量更新程度太大,导致网络参数训练的时候没法收敛;解决方法就是 归一化,梯度裁剪(设置阈值使其保持在一定范围内)

  • batch_size=1 和 batch_size≠1 对流程的影响不只是说并行计算:在计算差值的时候,由于公式是直接除掉 batch_size 作为最后结果(求均值)
    单个图片反向传播是很凶猛的,但是求平均值后可能温和一些。

黑盒可视化

使用 CNN 时可以把若干 channel(例如 RGB 是三个 channel,CNN 先随机若干矩阵把 channel 增多,那么这个矩阵里面的参数就是学习对象)

可能可以把 hidden layer 中所有 channel 的中间值加起来再变成一个灰度图像,就完成了可视化。

现在只会这一种。

待学习的事项

Xavier/ Glorot 初始化

如何保存丹药

标签:layer,Network,Neural,dfrac,dy,初学,channel,梯度,向量
From: https://www.cnblogs.com/yspm/p/NeuralNetwork.html

相关文章

  • ArchLinux安装KDE Plasma和NetworkManager后网络无法正常连接的问题
    前几天刚刷了系统,发现开机自动启动NetworkManager后,无法正常激活网络(也就是网卡开机默认DOWN),但手动dhcpcd后就可以正常使用网络,所以我最近一直在开机自启NetworkManager后手动sudodhcpcd,直到今天我发现ipv6有点小问题之后实在忍不了了,解决了一下这个问题具体怎么解决的呢,简单的......
  • C/C++初学者练习题库(Dev-C++开发环境)
    C/C++初学者练习题库(Dev-C++开发环境)几年前制作的一套C/C++程序题库,其目的是为了使学生在课堂上熟悉掌握C/C++基础知识。程序自带检验和错误反馈功能,并有积分激励机制,当时学校机房电脑只配置了Dev-C++开发环境,所以为了便于学生使用,题库的设计也就以在Dev-C++开发环境上使用......
  • 初学MVC快速上手
    步骤:第一步导入springmvc的坐标和servlet的坐标(添加依赖) 。第二步环境配置需要添加config类进行配置注解 第三步初始化Servlet容器,对该方法进行实现,并设置请求拦截第四步,创建控制器类,并设置路径 第五步创建jsp注意需要按照第一步中添加的前后缀进行 ......
  • 初学C语言day06--进程影响及类型限定符
    进程映像:程序:存储在磁盘上的可执行文件(二进制文件、脚本文件)进程:正在系统中运行的程序进程映像:进程的内存分布情况:text代码段存储二进制指令、常量,只读的,如果强行修改会产生段错误data数据段初始化过的全局变量、初始化过的静态局部变量bss静态数据段未初......
  • 概率图模型(PGM):贝叶斯网(Bayesian network)初探
    概率图模型(PGM):贝叶斯网(Bayesiannetwork)初探1.从贝叶斯方法(思想)说起-我对世界的看法随世界变化而随时变化用一句话概括贝叶斯方法创始人ThomasBayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界的真实变化而随机修正,我对世......
  • Azure Virtual Network (21) ER专线启用Fast Path
    《WindowsAzurePlatform系列文章目录》 在AzureER专线启动FastPath,具体的区别如下:禁用FastPath启用FastPathAzureVM访问本地VM流量,流量不经过ER网关AzureVM访问本地VM流量,流量不经过ER网关本地VM流量访问AzureVM流量,流量经过ER网关本地VM流量访......
  • DeepObfusCode:Source Code Obfuscation Through Sequence-to-Sequence Networks
    一、Introduction代码混淆技术旨在解决代码逆向对抗问题。本质上,代码混淆技术的目标是:在保持一个程序逻辑结构不变以及完整保存的前提下,同时让攻击者不易识别,以此保护软件的完整性和知识产权。传统的防护策略包括:插入空白/冗余的逻辑运算增加不必要的条件运算等传统的混淆......
  • 机器翻译 | Improving Neural Machine Translation Robustness via Data Augmentation
    论文地址:https://arxiv.org/abs/1910.03009动机神经机器翻译(NMT)模型在翻译干净文本时已被证明是强大的,但它们对输入中的噪声非常敏感。改进NMT模型的鲁棒性可以看作是对噪声的“域”适应的一种形式。最先进的方法严重依赖于大量的反向翻译数据。最近创建的基于噪声文本的机......
  • 初学vue
    做为一个在圈子内混饭吃的我来说,对于vue是久有耳闻,但是混饭吃嘛,也不要太新的技术,一般实现客户需求就好,毕竟不是一线城市最近有一个项目需要用到Vue,而且计划给公司用uniapp开发一个手机端应用,里面也需要用到vue的相关技术,所以今天开始了学习之路初学嘛,当然跳过Vue2直接学vue3首......
  • Springboot初学
    Springboot学习:参考网页:https://blog.csdn.net/sunroyi666/article/details/951899381.下载maven,修改配置:参考网页:https://blog.csdn.net/a805814077/article/details/1005459282.创建springbootEureka:遇到问题;Cannotresolvesymbol'springframework'解决方法:检查maven......