一篇文章带你入门机器学习 Part1 -->Machine Learning from Scratch

学习网站:Machine Learning from Scratch

Machine Learning from Scratch (Part1神经网络)

  • 神经网络——Neural Networks
  • 神经网络是如何工作的?
  • 训练神经网络

神经网络——Neural Networks

在人工神经网络的背景下:一个神经元是一个简单的单元,它持有一个数值。这个数值被称为它的"激活值"。

一个神经网络可以做什么
神经网络由许多神经元组成,这些神经元被组织成不同的层。通常有三种类型的层,输入层(Input layer)、隐藏层(Hidden layer(s))、输出层(Output layer)。

一个神经网络可以做什么
一个人工神经网络是一个统计模型,它从训练数据中学习模式,应用于新的、未见过的数据。

神经网络是如何工作的?

神经元之间的联系

每一层中的每个神经元都与下一层的所有神经元有联系。每一个联系的强度被称为“权重。在训练过程中,这些权重被调整以识别数据中的模式。”。

神经元的激活是如何决定的

一个神经元的激活值是基于,前一层所有神经元的激活值,和连接到那些神经元的权重。

神经元的工作原理

将每个传入的激活值乘以其相应的权重,然后将这些所有的乘积相加,最后添加一个称为“偏置”的特殊值。

偏置的作用

偏置有很有重要的作用,这使得神经元能够调整对输入的敏感度,正偏置使得神经元更有可能被激活,负偏置使得神经元不太可能被激活。
激活函数
在计算加权之后,我们应用一个激活函数,常用的选择包括:

  • Sigmoid 函数:将输出映射到0和1之间的范围。
  • ReLU(修正线性单元):如果输入为正,则输出输入;否则输出0。

如下图中,ReLu函数:
在这里插入图片描述
ReLu函数是更受欢迎的,因为它有助于网络更高效地学习。

训练神经网络

现在我们已经了解了神经网络的基本结构和运作方式,接下俩让我们来看一下它是如何学习的。

前向传播——Forward Propagation

即通过神经网络传递输入以获得输出的过程:从输入层开始,对于每个后续层:计算每个神经元的加权和并应用激活函数,重复上述步骤直到我们到达输出层。

测试性能:损失函数

为了训练我们的网络,我们需要衡量它的性能如何。我们通过损失函数来做到这一点。
如图所示以上步骤:
将网络的输出与期望的输出进行比较—>计算差异,将这个差异平方(以使所有值变为正数)—>将所有输出神经元的这些平方差相加。

这个结果被称为“损失”。损失越小,网络的性能就越好。

梯度下降和反向传播
为了提高网络的性能,我们需要调整其权重和偏差。
我们使用两个关键概念即梯度下降和反向传播来做到这一点。

他们的工作原理如下:

计算损失函数的梯度,这告诉我们改变每个权重和偏差如何影响损失。
在减少损失的方向上更新权重和偏差。重复这个过程很多次。

梯度下降

梯度下降法是最小化成本函数的优化算法。我们使用梯度来更新/调整权重和偏差,以最小化成本的方向进行。
我们寻找成本函数的负梯度,它告诉我们如何改变权重和偏差,以最有效地减少成本。

反向传播

反向传播机制,它来确定每一个单样本如何调整权重和偏差,而不仅仅是它们应该向上还是向下,而是在什么相对比例下这些变化能够最快地减少成本。

梯度的大小表示成本函数对每个权重和偏差的敏感度。
例如,你有梯度 [3.2, 0.1]。调整具有梯度3.2的权重导致的成本变化是调整具有梯度0.1的权重时成本变化的32倍。

激活函数的影响因素为以下三点:

1. 改变偏差的值
2. 按照其激活程度成比例地增加权重(激活越大,变化越大)。
3. 改变前一层所有激活值,按照其权重成比例地改变(权重越大,变化越大)。

(但我们不能直接影响激活值本身,只能影响权重和偏差。)

“反向传播”:反向传播是从最后一层向第一层应用的。

∂C/∂w = ∂C/∂a × ∂a/∂z × ∂z/∂w

其中 C 代表成本,w 代表权重,a 代表激活值(神经元的输出),z 代表加权和(神经元输入,激活前)。
这告诉我们如果我们稍微调整某个特定权重w,误差C会如何变化。
它指示了权重变化的方向。如果导数是正的,减小权重将减少误差,反之亦然。
它的大小告诉我们误差对这种权重变化的敏感程度。较大的幅度 = 权重对误差的影响更大。


调整权重和偏差,使得每个权重和偏置的平均微调是成本函数的负梯度。

(当我们训练一个神经网络时,我们的目标是最小化一个成本函数,这个函数衡量了模型预测值和真实值之间的差异。梯度是一个向量,指向成本函数增加最快的方向。因此,如果我们想要减少成本,我们需要朝着梯度的反方向调整权重和偏置,这就是所谓的“负梯度”。通过这种方式,我们可以逐步优化网络的参数,使模型的预测更加准确。)

对于这里的平均微调

以这张图片为例,表格的第一行包含了多个手写数字的图像(2, 5, 0, 4, 1, 9)。这些图像代表了用于训练神经网络的数据。表格的左侧列展示了不同的权重(w0, w1, w2, …, w13,001)。表格的内容则展示了这些权重在每个训练样本(手写数字)上的调整值。

对于权重w0,在第一个训练样本(数字2)上的调整值是-0.08,在第二个训练样本(数字5)上的调整值是+0.02,依此类推。
对于权重w1,在第一个训练样本(数字2)上的调整值是-0.11,在第二个训练样本(数字5)上的调整值是+0.11,依此类推。

右侧展示了这些调整值在所有训练数据上的平均值。例如,权重w0的平均调整值是-0.08,权重w1的平均调整值是+0.12
这些平均调整值可以用于更新神经网络的权重和偏置,以最小化成本函数,从而提高模型的性能。

训练神经网络的步骤
将所有步骤结合起来:

训练神经网络涉及多次重复以下步骤:

1.前向传播:将输入传递通过网络。
2.计算损失:衡量输出结果与预期结果的偏差。
3.反向传播:计算如何调整权重和偏置。
4.更新权重和偏置:进行小幅度调整以提升性能。
经过多次迭代,网络逐渐学会识别训练数据中的模式,并能够将这些知识应用于新的、未见过的数据。

ok,下图就是上面写到的一些内容简化版了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141526.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

全面理解tensor编程中矩阵的行和列

经常会在编程中遇到理解矩阵行和列的事情。 1、要明确无论这个张量有多少维度,它的矩阵乘法都只能作用于最后两个维度。 例如: import torcha torch.rand([64, 32, 3, 4]) b torch.rand([64, 32, 3, 4])c torch.matmul(a, b.transpose(2, 3)) # 交…

备战软考Day02-数据结构与算法

1.基本概念与三要素 1.什么是数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 2.数据元素、数据项 数据元素是数据的基本单位,通常作为一个整体进行…

18062 二维数组每行中的最大值

### 思路 1. 使用指针变量遍历二维数组的每一行。 2. 对于每一行,找到该行的最大值。 3. 输出每一行的最大值。 ### 伪代码 1. 定义一个指向二维数组的指针变量 p。 2. 遍历二维数组的每一行: - 将 p 指向当前行。 - 初始化 max 为当前行的第一个…

探索Python轻量级数据库:TinyDB的奇妙之旅

文章目录 探索Python轻量级数据库:TinyDB的奇妙之旅背景:为何选择TinyDB?什么是TinyDB?如何安装TinyDB?简单库函数使用方法场景应用常见Bug及解决方案总结 探索Python轻量级数据库:TinyDB的奇妙之旅 背景&…

10.4K Star,高性能富文本编辑器

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 在现代 Web 开发中,富文本编辑器是不可或缺的一部分&…

Java设计模式—面向对象设计原则(六) ----->合成复用原则(CRP) (完整详解,附有代码+案例)

文章目录 3.6 合成复用原则(CRP)3.6.1 概述3.6.2 案列 3.6 合成复用原则(CRP) 合成复用原则(CRP):Composite Reuse Principle,CRP 又叫: 组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)…

java中的注解原理是什么?

Java中的注解(Annotations)是一种用于提供元数据的机制。它可以通过在代码中添加注解的形式,将一些额外的信息嵌入到代码里。注解本质上不会改变程序的实际逻辑行为,但是可以帮助开发工具、编译器、框架等获取这些元数据&#xff…

信息学奥赛初赛天天练-90-CSP-S2023基础题2-离散数学、染色、完全三叉树、平面图、边双连通图、欧拉图、最长公共子序列、快速排序

PDF文档公众号回复关键字:20240915 2023 CSP-S 选择题 1单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 6 以下连通无向图中,( )一定可以用不超过两种颜色进行染色 A 完全三叉树 B 平面图…

Vue2学习笔记(01计算属性和监视属性)

1、事件修饰符 2、计算属性-computed 要显示的数据不存在,要通过计算得来。在computed对象中定义计算属性。在页面中使用{{方法名}}来显示计算的结果。 3、监视属性-watch 通过vm对象的$watch()或watch配置来监视指定的属性当属性变化时,回调函数自动调用,在函数内…

一文速通calcite结合flink理解SQL从文本变成执行计划详细过程

文章目录 你可以学到啥测试代码背景知识SQL转变流程图问题 你可以学到啥 SQL如何一步步变成执行计划的有哪些优化器,哪些优化规则calcite 和flink 如何结合的 测试代码 EnvironmentSettings settings EnvironmentSettings.inBatchMode(); TableEnvironment tabl…

非线性规划------ + 案例 + Python源码求解(见文中)

目录 一、非线性代数模型的例子eg1:人口增长模型(Logistic Growth Model)模型公式Python建模与求解代码运行结果 eg2:化学反应速率模型(Michaelis-Menten方程)模型公式Python建模与求解代码运行结果 eg3&am…

栈的应用之表达式求值(前缀、中缀、后缀)

目录 引入 1.中缀表达式的求值(两种方式) 方式一:使用两个栈直接求值 方式二:将其转换为后缀表达式求值 ①转换: ②对后缀表达式求值: 2.后缀表达式的求值(1个栈,存放运算符) 3.前缀表达式的求值(1个栈用来存放数字,相对来讲没那么重要) 引入 1.中缀表达式的…

高级 API 性能:着色器

着色器通过使您能够控制渲染过程的各个方面,在图形编程中发挥着关键作用。它们在 GPU 上运行,负责操作顶点、像素和其他数据。 常规着色器计算着色器像素渲染顶点着色器几何体、域和外壳着色器 常规着色器 这些提示适用于所有类型的着色器。 推荐 避…

细说STM32单片机使用通用定时器生成固定占空比和可变占空比PWM波的方法

目录 一、本实例测试的目的 二、硬件和CubeMX项目配置 1、硬件开发板 2、项目配置 (1)定时器TIM2_CH1 (2)时钟和Debug (3) NVIC (4)GPIO 3、输出固定占空比的PWM波源码 &…

docker进入容器运行命令详细讲解

​ 大家好,我是程序员小羊! 前言: 在 Docker 中,进入容器并运行命令是常见的操作,尤其是当你想要调试、检查日志或手动运行某些程序时。Docker 提供了几种方式来进入容器和执行命令。 前提条件 确保你的 Docker 容器…

Vulnhub:BlueSky

靶机下载地址 信息收集 主机发现 nmap扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip:192.168.31.171。 端口扫描 nmap 192.168.31.171 -A -p- -T4 开放端口22,8080。 目录扫描 访问8080端口,如图,是tomcat管理页面…

unity3d入门教程七

unity3d入门教程七 17.1物理系统17.2静态刚体17.3刚体的碰撞17.4刚体的反弹18.1运动学刚体18.2碰撞检测18.3碰撞事件回调18.4目标的识别18.5碰撞的规避 17.1物理系统 在物理系统中的物体具有质量和速度的是刚体 不用写代码就会自由落体运动了 17.2静态刚体 给 ‘地面’ 添…

学习笔记JVM篇(四)

垃圾回收器 说完垃圾回收算法接下来就需要对应的垃圾回收器去回垃圾回收器。接下来介绍几种垃圾回收器 1、Serial 串行回收器,是单线程版本,暂停所有的应用。在单CPU的情况下效率是很高的,因为不涉及线程的上下文切换。适用于小型程序和客…

【C语言】分支和循环(下)

分支和循环(下) 5、练习:判断年份是否为闰年6、短路7、switch语句7.1 if语句和switch语句的对比7.2switch语句中的break语句7.3switch语句中的default7.4 switch语句中的case和default的顺序问题 8、while循环8.1 if和while的对比8.2 while语…

C++_20_多态

多继承会造成 菱形继承** 使用虚继承来解决 不是给爷爷类加 也不是给子类加 是给父类加 虚基指针和虚基表 多态 概念: 概念: 一个事物的多种形态,简称多态 如: 对象的多态 ​ 张三 ​ 在对象面前 怂 ​ 在朋友面前 谄媚 ​ 在父…