【一起撸个DL框架】1 绪论

  • CSDN个人主页:清风莫追
  • 欢迎关注本专栏:《一起撸个DL框架》
  • GitHub获取源码:https://github.com/flying-forever/OurDL
  • blibli视频合集:https://space.bilibili.com/3493285974772098/channel/series

文章目录

  • 1 绪论 🍉
    • 1.1 在人工智能的大潮里
    • 1.2 为什么重复造轮子
    • 1.3 深度学习框架简介

1 绪论 🍉

1.1 在人工智能的大潮里

人工智能——一个如今十分火热的话题,人们在生活中越来越多地使用它、谈论它。在2022年之前,人工智能在我们的生活中就已经有了许多落地的应用,如手机扫脸付款、抖音个性化推荐。而ChatGPT的问世又掀起了新一轮的热潮,寒假期间在新闻联播上看到ChatGPT时,我突然有些恍惚——聊天机器人已不再只是实验室里的玩物、人们眼中的“人工智障”,它突然闯进大众的生活里了。

人工智能越来越激起人们的好奇与关注了,因为它越来越强大。但,从“人们手工地定义一条条的规则”到“随便聊”的聊天机器人,从”人工“到”智能“,这其中究竟发生了什么?

也行你已经听过深度学习机器学习这样的概念,它们与人工智能是这样一种关系:人工智能是我们的目标,机器学习则是手段,而深度学习是机器学习的一种,同时也是目前我们实现人工智能最有希望的方式。(ChatGPT很强大,但在许多人看来它并不具有真正的智能)

而深度学习技术必然离不开深度学习框架(这正是我真正要介绍的内容),现流行的框架如Tensorflow,Pytorch,PaddlePaddle,其基本原理是一致的。也许你在已经了解了深度学习的理论之后,使用深度框架实践时仍然会遇到一些障碍——源于框架的障碍。它的封装会让你很方便,但有时它的抽象也会让你很头疼。

1.2 为什么重复造轮子

程序员间流传着一句“名言”:不要重复造轮子。但我们如果是作为一个学生的角色,那么应该学会去“造轮子”。

使用框架的过程难以让我了解它,因为我能看见的唯有现象而已。人们有时会说,不懂就去读源代码,而这也很难得以清晰的了解框架的原理,不过是管中窥豹,只见一斑罢了。而亲手造轮子的方法很有用,它迫使你将脑海中碎片化的知识组织起来,以达到你的目标。

学习造轮子有三种状态:一是跟着敲代码,二是试着改代码,三是独立设计。其中后两种方式更有助于促进你自己去思考,我更倾向于第三种。当然,你肯定无法凭空知道如何去设计一个深度学习框架,学习知识是必要的。但是在学过一部分之后,就可以试着关上书(或者别的什么资料),从第一行代码开始,自己去设计代码逻辑,以实现一些功能。

然后,你可以再与你的资料中的实现进行对比,有哪些异同,哪些好的地方和不好的地方,他为什么和你的想法不一样,他的目的是什么。收获反馈和总结之后,再脱离你的资料,试着去改进你的代码。

此外,在开始你自己的设计和实现之前,你甚至可以先去干点别的,以在脑海中忘掉书中一些具体的实现细节,留下基本的原理——给自己留下更多思考和选择的机会。

1.3 深度学习框架简介

所谓“深度学习框架”,其实是一个代码库,我们可以利用其中预定义的函数和类更快地实现一个深度学习任务,比如猫狗分类问题。本文假设读者已经了解一些深度学习的原理,而重点解释在你实现深度学习任务的过程中,框架究竟帮你做了哪些事情。

深度学习的本质是函数拟合,例如对于目标函数 y = 2 x + 3 y=2x+3 y=2x+3,你需要现设计一个合适的函数架构,比如 y = w x + b y=wx+b y=wx+b,其中w和b两个参数是未知的,通过不断地把很多组自变量x和对应的函数结果y“喂给”你设计的函数,程序就可以找出w和b的值。因此,深度学习可以说是一种“在现象中总结出规律”的技术。

深度学习框架的核心功能是自动微分,而自动微分的原理是复合(嵌套)函数求导的链式法则,例如, y = x 2 , z = 2 ∗ y y=x^2,z=2*y y=x2,z=2y ,则z关于x的导数

d z d x = d z d y d y d x = 2 ∗ 2 x = 4 x \frac {dz}{dx}=\frac{dz}{dy} \frac{dy}{dx}=2*2x=4x dxdz=dydzdxdy=22x=4x

深度学习框架的自动微分功能是基于计算图实现的,例如下面的计算图定义了函数 y = w x + b y=wx+b y=wx+b,输入x而得到 w x + b wx+b wx+b,这便是正向传播的过程。

在这里插入图片描述

在计算图的结构之上,沿着计算函数值相反的路径,就可以利用链式法则求出最终结果结点(y)对于变量结点(x、w、b)的导数值dx、dw、db,如下图所示,求得 d w = x ∗ d y dw=x*dy dw=xdy d b = d y db=dy db=dy。我们的目标只是找到参数w和b合适的值,因此不需要求关于x的梯度。

那么dy是什么呢?可以取1,那得到的dw就是“+”结点关于w的导数;也可以是从后面其它结点传递过来的导数。

在这里插入图片描述

小结一下,这一节主要介绍了深度学习中一些基本的概念,包括函数拟合自动微分链式法则计算图,后面将会在这些概念的基础之上逐步搭建起一个简单的深度学习框架,并使用我们自己搭建的框架完成一些经典的深度学习任务,同时获取对于这些概念更加清晰的认知。


下一篇:【一起撸个DL框架】2 节点与计算图的搭建

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Openai+Coursera: ChatGPT Prompt Engineering(二)

这是我写的ChatGPT Prompt Engineerin的第二篇博客,如何还没看过第一篇的请先看我写的第一篇博客: ChatGPT Prompt Engineerin(一) Summarizing(总结/摘要) 今天我们的重点关注按特定主题来总结文本。 设置参数 import openai openai.api_…

【自然语言处理】【大模型】Chinchilla:训练计算利用率最优的大语言模型

Chinchilla:训练计算利用率最优的大语言模型 《Training Compute-Optimal Large Language Models》 论文地址:https://arxiv.org/pdf/2203.15556.pdf 相关博客 【自然语言处理】【大模型】CodeGeeX:用于代码生成的多语言预训练模型 【自然语言…

natapp反向代理

在我们开发中总会遇到这种需求,需要让我们本地的地址能被外网访问;(比如微信公众号的开发,这边需要与微信服务器进行交互) 为了完成这个需求,我们就可以是用反向代理,这边主要用到一个内网穿透…

正向代理与反向代理

函数是一等公民 // 新建函数类型 type HandlerFunc func(http.ResponseWriter, *http.Request)// 新建函数方法 func (f HandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) {f(w, r) }// 主函数 func main() {// 实例化函数hf : HandlerFunc(HelloHandler)// 创…

代理和反向代理

代理是代理的是用户(eg:浏览器); 反向代理是代理的是服务器(Nginx); 如下图: 常用的代理工具:Fiddler、Whistle、Charles 常用切换代理的工具:SwitchyOme…

反向代理HAproxy

HAProxy 介绍和架构HAProxy 安装HAProxy 基础配置HAProxy 调度算法HAProxy 高级功能 1 Web 架构介绍 2 HAProxy 简介 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(…

正向代理、反向代理介绍

目录 一、定义 1、正向代理(forward proxy) 2、反向代理(Reverse proxy) 3、透明代理(transparent proxy) 二、生活中代理的例子 1、正向代理 2、反向代理 三、代理的作用 1、正向代理的作用 2、反向代理的作用 目前大家提到的代理技术无外乎三种:正向代理…

代理、正向代理与反向代理

一、代理 1.1 什么是代理 代理也被叫做网络代理,是一种比较特殊的网络服务,允许一个终端(通常指客户端)通过这个服务与另一个终端(通常指服务器端)进行非直接的连接。例如:一些网关、路由器等…

如何下载一直播的回放视频

想下载一直播回放视频,然后就可以用播放器倍速观看了 (一)处理一下想要下载的视频 (二)使用ffmpeg将.m3u8格式文件转换成.mp4文件 (1)下载: 下载地址:windows版本 : http://ffmpe…

php对接腾讯云直播,聊天,im,云录制产生回放

首先先在腾讯云中开通这三项 IM中创建项目 云直播 解析推拉流地址: $domain $this->getConfig(anchor_push); //推流地址$domainpull $this->getConfig(anchor_pull); //拉流地址$streamName kangfuyuan.$res; //直播间ID(唯一的&am…

心法利器[84] | 最近面试小结

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里&…

Visual Studio 2022 集成虚幻引擎功能

【CSDN 编者按】微软作为全球著名的游戏厂商,其在游戏制作与开发体验上也积极下功夫。在听取了游戏开发人员的反馈后,Visual Studio 2022 正式集成 Unreal Engine (UE、虚幻引擎) 作者 | David Li 责编 | 梦依丹 出品 | CSD…

苹果:付费才能用 iOS 开发者预览版,网友吐槽:找 Bug,还得先交 99 美元?

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 以后要尝鲜 iOS 开发者预览版,要先付费,才能测试? 苹果的更新说明 近日,苹果最新公布的一项政策引发了不少开发者的争议,其表示,从…

Android 系统 TP 事件处理流程

简单流程 首先注册 i2c 设备,添加 tp 驱动,然后在 tp 驱动上响应中断、获取用户操作的 数据,通过筛选等一系列操作将数据上报。 *中断、线程、工作队列生成 *放大缩小、xy 对调等算法 *get_event 函数使用 1. 系统调用 TP 驱动 TP 驱动的调…

Java网络编程之UDP和TCP套接字

一. 网络编程概述 我们知道在网络通信中, 数据的发送是从应用层开始, 一直封装到物理层然后进行发送的, 应用层要将数据交给传输层进行封装; 而接收方拿到数据后是从物理层到应用层进行分用, 传输层要将拿到的数据再分用给应用层进行使用, 网络编程实际操作中最关键的就是我们所…

工程师“魔改” AirPods Pro 接口,苹果“妥协”将成大势所趋?

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 近年来, USB-C 接口凭借其高效的数据传输、充电速度等优势,促使时下的许多手机品牌大规模使用,可谓实现了统一“半壁江山”的势头,甚至盖…

web开发中的通信协议

websocket def:websocket协议是基于tcp的,实现浏览器与服务器之间全双工通信的一种网络协议 websocket是一种持久协议,多应用在聊天,客服咨询等有实时报送需求的场景下。 早期没有websocket时,通过ajax短时轮询&#x…

GLM联合go-cqhttp实现qq群GLM机器人服务器的本地化部署笔记

GLM qq群服务器的本地化部署笔记 一. 概述1.1 整体结构1.2 目标1.3 需求1.4 流程说明 二. 部署流程2.1 使用GPT转发程序帮助文档2.1.1 使用git安装GLM2.1.2 不使用git安装GLM 2.2 使用Anaconda Navigator 虚拟运行GLM2.2.1 [https://www.anaconda.com/](https://www.anaconda.c…

chatglm-6b:本地手动下载,本地部署

文章目录 模型效果演示操作步骤步骤一步骤二步骤三 ChatGLM-6B是一个由清华大学和智谱AI联合研发的开源对话语言模型。它是一个支持中英双语问答的对话系统,并在中文方面进行了特别的优化。 该模型基于General Language Model (GLM)架构,具有62亿参数。借…

阿里组织变革:设立六大业务集团,成熟一个,上市一个;微软软件工程师最高年薪28.8万美元;iOS 16.4 发布|极客头条...

「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 一分钟速览新闻点&#…