当前位置: 首页 > news >正文

【七篇文章从零速通transformer】01 从零开始解密神经网络:深度学习基础全解析

文章简介

本系列文章旨在帮助零基础的读者系统地掌握深度学习,最终能够理解 Transformer 架构。本篇文章是第一篇,我们将从深度学习最核心的知识——神经网络——开始讲解,深入浅出地带你了解神经网络的结构、如何让神经网络工作,激活函数、损失函数、优化器和反向传播等关键概念。这些内容是理解深度学习的基础,如果你完全没有编程或数学背景,也不用担心,文章中的例子和讲解都会尽可能简单易懂。


1. 什么是神经网络?

在深度学习中,神经网络是我们用来处理数据的模型,它模仿人脑的工作方式,能自动学习并识别数据中的模式。

神经网络的结构:输入层、隐藏层和输出层

我们可以把神经网络看作是一个“输入数据 -> 处理数据 -> 输出结果”的机器。它的结构主要分为三部分:

  1. 输入层(Input Layer):负责接收数据,比如一张图片的像素值,或者一段文字的编码。输入层只是“传递”数据到网络的下一层。
  2. 隐藏层(Hidden Layers):这里是神经网络真正处理数据的地方。隐藏层包含“神经元”,这些神经元会对输入数据做数学运算(加权求和,激活等),从中提取特征。网络的复杂性体现在隐藏层的数量和它们内部的结构上。
  3. 输出层(Output Layer):生成预测结果。对于分类问题,输出层的结果是一个概率分布,告诉我们输入属于每个类别的可能性。
神经网络的工作方式

神经网络的工作方式其实很像“加法器”,它把输入的数据“加起来”,然后决定输出什么。

例如,假设输入层有 3 个值(像素值),我们可以简单地给它们加上不同的权重(也就是加权求和)。每个输入会被乘以一个权重值,再加上一个偏置(相当于一个修正值),最后再通过激活函数转化为输出。

图示

css输入层          隐藏层         输出层
[x1, x2, x3]  -->  [h1, h2]  -->  [y1, y2]

在隐藏层中,每个神经元接收输入数据,通过一系列数学运算产生输出,这样一步步往后推,最终输出层给出结果。


2. 激活函数:让神经网络更强大

如果我们只是简单地把输入“加权求和”,这会限制神经网络的表现能力,因为这样的模型是“线性的”,无法处理复杂的问题。激活函数的作用就是引入“非线性”,让网络可以解决复杂问题,比如识别图片中的猫和狗。

常见的激活函数
  1. ReLU(Rectified Linear Unit)
    ReLU 是目前最常用的激活函数。它的计算非常简单:如果输入小于 0,输出为 0;如果输入大于 0,输出为原值。

    例子

    • 输入:-2,输出:0
    • 输入:3,输出:3

    公式:f(x) = max(0, x)
    它可以帮助神经网络学习更快,并且避免一些计算上的问题。

  2. Sigmoid
    Sigmoid 会把输入压缩到 0 和 1 之间。你可以把它想象成一个“开关”,输入越大,结果越接近 1,输入越小,结果越接近 0。

    公式:f(x) = 1 / (1 + exp(-x))
    这意味着输入越大,输出越接近 1;输入越小,输出越接近 0。Sigmoid 常用于二分类问题(例如,判断一封邮件是否是垃圾邮件)。

  3. Tanh(双曲正切函数)
    Tanh 和 Sigmoid 类似,不过它的输出范围是 -1 到 1,输入越大,输出接近 1;输入越小,输出接近 -1。它在需要处理正负值的任务中比较常用。

    公式:f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x))

激活函数如何帮助神经网络?

激活函数通过将线性输入转换为非线性输出,赋予神经网络处

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 酒店布草洗涤-酒店分层管理编程实现--———未来之窗行业应用跨平台架构
  • 低代码技术:简化应用开发的未来
  • 基于python+django+vue的医院预约挂号系统
  • HTTP常见状态码 HTTP的逐步发展(通熟易懂版)
  • linux-Linux 内核与模块管理-内核基础
  • 资源创建方式
  • 从零开始讲DDR(0)——DDR的前世今生
  • 《使用 LangChain 进行大模型应用开发》学习笔记(四)
  • 1.pytest基础知识(默认的测试用例的规则以及基础应用)
  • Navicat 17 新特性 | 聚焦 MongoDB
  • 北森笔试测评之言语理解到底难不难
  • LabVIEW机动车动态制动性能校准系统
  • 【运维监控】Prometheus+grafana监控flink运行情况
  • 【ComfyUI】自定义节点ComfyUI-Impact-Pack——人脸、手部、肢体修复
  • Linux常用命令(四)
  • 「译」Node.js Streams 基础
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript HTML DOM
  • JS笔记四:作用域、变量(函数)提升
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Nodejs和JavaWeb协助开发
  • Python实现BT种子转化为磁力链接【实战】
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue官网教程学习过程中值得记录的一些事情
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 分布式熔断降级平台aegis
  • 给github项目添加CI badge
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端临床手札——文件上传
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 小程序开发中的那些坑
  • 一个JAVA程序员成长之路分享
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 大数据全解:定义、价值及挑战
  • # .NET Framework中使用命名管道进行进程间通信
  • # Redis 入门到精通(七)-- redis 删除策略
  • ## 1.3.Git命令
  • #{}和${}的区别是什么 -- java面试
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (4.10~4.16)
  • (52)只出现一次的数字III
  • (done) 两个矩阵 “相似” 是什么意思?
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (void) (_x == _y)的作用
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (九)c52学习之旅-定时器
  • (转)chrome浏览器收藏夹(书签)的导出与导入