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

简介: 1 绪论 🍉1.1 在人工智能的大潮里

1 绪论 🍉

1.1 在人工智能的大潮里

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


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


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


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

1.2 为什么重复造轮子

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

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


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


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


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

1.3 深度学习框架简介

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

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


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

屏幕截图 2023-12-28 181058.png

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

fc468584d2d447bda672efb0a89c1323.png

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


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

43cc79feda314a92ad06673d1d8585bb.png

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


相关文章
|
算法 前端开发 JavaScript
【五子棋实战】第1章 项目架构与开发思路
五子棋是一种古老而受欢迎的棋类游戏,本博客将介绍如何使用前端和算法接口来制作一个五子棋游戏。 此次实战项目包含项目的所有代码、教学的系列博客,分别放在公众号、CSDN,以便广大读者能够更好地学习、实践与二开。
279 0
|
3月前
|
缓存 JSON 前端开发
webpack入门核心知识还看不过瘾?速来围观万字入门进阶知识
该文章深入探讨了Webpack的高级配置与使用技巧,包括Tree Shaking、开发与生产环境的配置差异、代码分割策略、预加载与预取技术的应用等方面的内容。
|
4月前
|
中间件 API 开发者
Bottle框架探秘:如何用几行代码搅动Web开发江湖?
【8月更文挑战第31天】Bottle是一个仅依赖Python标准库的轻量级Web开发微框架,无需额外依赖,简化部署与维护。它以简洁高效著称,适合快速构建Web应用。通过简单的示例即可上手,如用几行代码实现“Hello World”应用。除基础功能外,Bottle还支持模板渲染、会话管理和表单处理等,适用于学习及小型项目,也能在高性能要求的应用中展现价值。无论是新手还是有经验的开发者,Bottle都是高效Web开发的理想选择。
52 1
|
4月前
|
前端开发 JavaScript API
【独家揭秘】Bottle框架为何能俘获开发者的心?三大实战案例带你领略Web开发新境界!
【8月更文挑战第31天】Bottle是一款轻量级Python Web框架,以简单高效著称,秉持极简设计,适合快速开发小型项目或构建API服务。本文通过具体代码示例展示Bottle框架的独特魅力,从安装到创建应用、路由设置、模板渲染及表单处理等方面进行详细介绍,帮助读者轻松上手并掌握Bottle的应用技巧。
69 1
|
4月前
|
数据库 开发者 数据库管理
【惊艳登场】Bottle框架凭什么成为Web开发新宠儿?一个实战案例告诉你背后的秘密!
【8月更文挑战第31天】Bottle是一个简洁高效的Web框架,适用于构建轻量级应用。本文通过开发一个在线笔记应用,展示了Bottle的核心特性和优势。从环境搭建、路由设置到数据库操作,详细介绍了用户注册、登录、笔记创建及管理等功能的实现过程。通过简洁的语法和灵活的路由机制,Bottle让开发者能快速构建功能完备的应用,提升开发效率。
53 0
|
7月前
|
SQL 缓存 Java
学生成绩管理系统的设计与实现(论文+源码)_kaic
学生成绩管理系统的设计与实现(论文+源码)_kaic
|
7月前
|
SQL 关系型数据库 MySQL
C#程序设计案例开发教程
C#程序设计案例开发教程
80 0
|
前端开发 JavaScript Java
Javaweb第一章:Web前端的入门理论
Javaweb第一章:Web前端的入门理论
133 0
|
Java 应用服务中间件
JavaWeb第五章课后题 Web开发基础
JavaWeb第五章课后题 Web开发基础
91 0
|
前端开发 JavaScript Java
图书管理系统的开发与设计(论文+源码)_kaic
随着科学技术的快速发展,尤其是计算机技术的突飞猛进,计算机技术普及到日常生活、学习生活的方方面面。由此想到学校的相对于传统的图书管理系统,帮助到学校的读者和学校的图书管理员的系统。提升图书管工作人员的效率,满足学校学生对于图书管理系统的需求,进而构思相关系统。 本文阐述了开发本校图书馆管理系统的最基本设计方法,阐述了应用系统的设计观念。对部分功能进行分析和设计。本图书管理系统,能够帮助本校学生和管理员通过线上直接对接。本项目软件架构选择B/S模式,总体功能模块运用自顶向下的分层思想。系统设计主要包括首页管理、读者管理、图书分类管理、图书信息管理、图书归还管理、图书借阅管理、超期提醒管理、留言板