自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 收藏
  • 关注

原创 Transformer与注意力机制

循环神经网络(RNN)是专门用来处理自然语言、金融信息等时序数据的一种神经网络。它的结构和运作方式如下图所示,基于马尔可夫决策模型。图1 循环神经网络的结构和运作方式应该注意到以下几个性质:RNN是输入数据的。(时序中靠后的输入依赖前面一个输入的隐层输出值)RNN层数不固定,但总共只有3个参数组(输入参数、隐藏参数、输出参数),**各层之间共享权重。**其实这也好理解,因为时序序列中每一个输入输出的映射关系,应该与其在时序中所处的位置无关。所以RNN各层的权重应该共享,实际只训练了一层的参数。

2023-06-16 10:03:50 1264 2

原创 L2正则与权重衰减

是优化器中做的一种具体策略,其目的是让网络参数(权重)得到不同程度的衰减。具体来说,权重越大,希望衰减地越快。是数学上 对最优化式的一种约束手段,采用L2范数对变量进行约束,可以达到一些想要的效果。(下面会证明)在不引入动量的SGD系优化器中,权重衰减完全等价于L2正则。对于引入动量的SGD优化器中,权重衰减约等于L2正则,其差别实际可忽略不计。而对于Adam系优化器,权重衰减不能认为等价于L2正则。

2023-06-16 10:01:28 373

原创 常见优化器详解

目前有两种主流优化器:随机梯度下降系(Stochastic Gradient Descent, SGD)和Adam系。应该认识到的是,优化器并不是某类数学上的优化算法,而是梯度下降(一阶迭代法)的工程实现方案和包装。

2023-06-16 09:59:57 3092

原创 线性神经网络

我们应该从线性神经网络开始,去逐步了解深度神经网络(深度学习)的各种复杂结构和底层原理。

2023-06-16 09:54:04 995

原创 深度学习经典trick汇总

trick这个词或许有投机取巧的意味,但深度学习论文中出现的很多这个trick确实对模型更方面性能有所提高,而且它们中的很多还具有普适性,那么这种“trick“或许应该被叫做“技术”。

2023-06-16 09:51:33 1581

原创 卷积神经网络

有了多层感知机之后,我们应该怎么做CV(Computer Vision)任务呢?一种简单的想法是把图像看成一维张量直接输入到一个多层感知机里。这样可以吗?当然可以,早期的CV就是这么做的,但是有啥问题呢?巧合的是,以上这俩问题,通过引入卷积这个技术方案可以【一石二鸟】。下面举例推导,假设输入是k×l的单通道图像,准备使用的网络是含有一个隐层的多层感知机。hui0∑kl​Wi​xi​1-1(1-1)中,kl分别为图像宽度和高度;x为把图像压成一维后的向量(1×kl);

2023-06-16 09:50:32 823

原创 常见骨干网络介绍

骨干网络(backbone network)顾名思义,是深度学习中最核心的网络组成。本文按时间顺序,简要介绍几种影响重大的backbone设计思路,我们或许可以从窥探前人的设计思路中获得启发和灵感。

2023-06-16 08:27:47 3093

原创 多层感知机与深度学习算法概述

从多层感知机的问题出发,引出深度学习算法。对深度学习算法的基本组成介绍明白。深度学习实现效果的总体评价方法做一个介绍。诚然,时至今日 深度学习是一个较大的计算机科学领域了。深度学习领域又可以分为若干小领域。按应用场景分:CV、NLP、数据分析…(每个应用场景又分出好多细分领域…)按算法分:CV的卷积神经网络、NLP的transformer/注意力机制、强化学习…(每个算法也有若干细分算法,适用于各种应用场景)那么多场景,那么多算法;

2023-06-16 08:08:11 4155 1

原创 Linux网络工具简介

Linux网络工具简介学习计算机网络不能只学习理论知识,同时必须学会网络工具的使用,用网络工具来快速判断自己程序的网络状态并发现问题。第一次使用网络工具前需要先下载安装:安装网络工具包net-tools网络工具包包含很多常用的网络命令,其中最常用的是ifconfig和netstatapt-get install net-tools//Ubuntuyum -y install net-tools//centos安装tcpdumpapt-get install tcpdump//Ubun

2022-05-24 21:06:06 1144

原创 DNS服务简介

DNS服务简介一、 DNS是什么?人类更倾向于记忆字符串类型的数据,比如域名“www.baidu.com”,而在访问互联网设备中,计算机网络直接提供的都是由数字构成的IP地址,比如“192.168.45.123”。在用户使用时,让人类记住这样一串数字显然困难,因此,DNS服务出现了,旨在构建IP地址与域名之间的翻译。DNS(Domain Name System,域名系统)是一种应用于因特网中的域名与IP地址相互映射的分布式数据库服务器。可以帮助用户方便地通过域名得到响应IP地址,进而访问该IP地址的

2022-05-23 18:34:52 2272

原创 数字的机内表示

数字的机内表示先声明,下面的图来自于B站up主——九曲阑干 的视频课程,讲计算机组成原理十分简练通透!想学CSAPP的小伙伴可以看书+看他的视频!本文来自对视频内容的整理加上一些自己个人的逻辑和理解。数字的机内表示,几乎是每个电学专业的必修课(比如说自动化的微机原理,哈哈哈哈),计算机也不例外。但是本科的时候还真没弄懂这部分知识,所以今天决定再次学习它!一、 信息在计算机中的存储首先要弄清楚计算机是如何存储信息的呢?位和字节位(bit)和字节(Byte)的概念应该很熟悉了,考过计算机二级的都

2022-05-19 21:43:02 698

原创 epoll为什么这么高效?

epoll为什么这么高效?先说结论:我觉得不是epoll有多高效,而是linux中其他的多路IO复用(select/poll)的接口有多低效。。。select和poll更像是一个内核提供给你的小玩具,帮你入门多路IO复用。真正生产级别的工具是epoll。首先需要复习一下IO复用是啥呢?简单说 就是用一个句柄同时监控多个IO的状态(某一时刻是否可以非阻塞读写?)。如此,我只要查看这一个句柄的情况就可以处理很多个IO,从而在恰当的时机进行有效的非阻塞读写,避免用户态反复遍历多个IO,十分低效。这就需要

2022-05-18 20:57:41 854

原创 c语言过程栈机制详解

c语言过程栈机制详解先声明,下面的图来自于B站up主——九曲阑干 的视频课程,讲计算机组成原理十分简练通透!想学CSAPP的小伙伴可以看书+看他的视频!本文来自对视频内容的整理加上一些自己个人的逻辑和理解。过程栈在c/c++中起着很重要的角色,为了更深入地理解一个c/c++程序是如何运作的、程序core时我们该怎么查找问题,弄清楚过程栈机制都是很有必要的!一、 汇编语言基础1. c程序从源文件到执行的过程图1 c/c++程序从源文件都可执行文件的过程记得在很久以前的笔记放过一张这个图,相信每一

2022-05-13 17:41:21 339

原创 c++内存分配接口

c++内存分配接口很久之前的博客中我们谈到过c++中,new和delete的调用路径。但今天的介绍是更进一步的,希望读者可以了解到:我们自己也可以”重载“new、delete关键字的行为,为自定义的类设计独特的分配内存策略。首先,需要回顾一下c++内存分配的接口。图1 c++内存分配调用关系可以这样理解:当你设计一个类时,如果类中有重载operator new,编译器会优先调用你设计的operator new分配内存;如果类内没有重载operator new,则调用全局的operator new。

2022-05-09 17:36:56 249

原创 c++ 类型转换与explicit

c++ 类型转换与explicit本文试图搞清楚这样2个问题:c++ 类型转换有哪些?作用分别是什么?实际工程中应该怎么用?经常查看标准库源码的同学会发现标准库中很多类构造函数会带有explicit声明,explicit关键字是为了做什么的?一、c++的类型转换简介可不要上来就说4种类型转换昂。。类型转换按照触发条件分可分为:隐式类型转换,显式类型转换;而按照行为分可分为:static,dynamic,const,reinterpret。我们先按照行为划分介绍4种类型转换:1. static

2022-05-09 16:59:45 485

原创 std::move与std::forward

std::move与std::forward这俩家伙显然都是c++11的产物无疑了。分别叫做:移动 和 完美转发。如果你写过模板函数,那么你十有八九会碰到std::forward;如果你经常使用智能指针(特别是unique),或者需要用移动来避免深拷、提高效率,那么你一定会碰到std::move。那么,下面我们来分别理解一下他俩啥原理、咋用的吧!1. std::move——移动首先需要记一个重要的结论:std::move什么也没做,只是营造一种”移动语义“。理解上面这句话非常重要,什么叫营造”移动语

2022-05-07 18:46:51 923

原创 c++的三种变量语义

c++的三种变量语义1. 值语义变量这。。。其实我们大一学c语言的时候都知道它是啥!但当时的自己可能并不理解值语义变量到底意味着啥???直到我反复研读primer、mordern c++。再结合自己写代码,慢慢才对这个抽象有了更深的认识。值语义变量,比如:int a=0;std::vector<int> arr;class A{ //some functions... Big* big_;//这是一个占用很大空间的类};A aa;看似这很简洁,就是不带引用和指针

2022-05-07 18:40:07 373

原创 c++11 类特殊成员函数生成规则

c++11 类特殊成员函数生成规则对c++实际工程开发时,设计一个类是很常见的操作。可是很多c++初学者往往咬不准编译器自动生成类特殊成员函数的具体规则。(比如说我哈哈哈)这样在自己设计类时,就会和编译器的行为产生冲突,达不到自己预期的设计效果。所以对于c++这样一门语言来说,我们必须彻底弄清楚编译器究竟如何自动生成类的特殊成员函数的?这里类的特殊成员函数(c++11)包括:构造函数(ctor)、析构函数(dtor)、拷贝构造函数(c-ctor)、重载拷贝赋值运算符(c=)、移动构造函数(m-ctor)

2022-05-07 18:36:21 231

原创 c++11 noexcept关键字作用

c++11 noexcept关键字作用c++2.0中,一条经典的规范是:尽可能地为一个函数加上noexcept声明,意味着程序员向编译器保证该函数不会发射异常。这条规范说的很对。那么,本文我们主要来探讨:为什么给函数加上noexcept会优化其性能?noexcept的常见用法?你可能会觉得自己也不确定这个函数是否会在运行时发射异常,那么到底什么时机应该为函数加上noexcept可以获得最佳优化?一、noexcept声明对函数性能的优化这个原因从直观上理解应该是:既然开发者确保此函数不会发射

2022-05-07 18:30:34 8653

原创 c++11/14 auto 与 decltype

auto 与 decltypec++11以后新增的这两个关键字可谓是“冤家路窄”。如果你是初学者,可能不能体会到为什么他俩有紧密的关系。你可能会说:auto就是根据根据给变量赋的值推出变量的类型;decltype就是可以推出来任意表达式的类型嘛。void fun(int,int);decltype(fun) f;//f的类型为:void(int,int)auto f1=f;//f1的类型为:void(*)(int,int),这里的函数会退化成指针,这是为啥呢?确实,作为初学者知道这些应该就够了,

2022-05-07 18:02:05 440

原创 c++11模板类型推导规则

模板类型推导规则当你准备迫切地想要了解本文的内容时,说明你对c++的了解已经比较深入了!本文将试图介绍c++11之后的模板类型推导机制是怎样的(加入右值引用概念),诚然,模板类型推导规则是了解GP(泛型编程,Generic Programming)的基础和前提,但只会这个还远远不够,泛型编程对我来说还是一个触不可及的范式;哪怕你不准备学习使用GP,模板类型推导规则仍然是一个合格的c++工程师必备的知识,模板在现代c++开发中还是很常用的!c++的函数/类模板为我们提供了这样一种语义:可以针对多种不定的类

2022-05-07 17:21:16 2090 1

原创 c++11 统一初始化

c++11 统一初始化一、c++98/03的初始化方式括号初始化int a(2);//ctor(尽管这个例子貌似不是很恰当)int b(a);//c-ctor列表初始化://c++98/03的列表初始化用于初始化数组int arr1[3] = { 1, 2, 3 };int arr2[] = { 1, 3, 2, 4 };//c++98/03的列表初始化用于初始化结构体变量(貌似不太常用)struct A{ int a; int b; int c;};

2022-05-06 21:46:47 557

原创 const与constexpr

const与constexprc++开发中,常量属性是避免不了要接触的。如果运用不好,函数或变量的常量属性会给你造成麻烦。其中,把const和constexpr这两个关键字弄混是一大原因。(当然还有其他原因引起困惑。。)本文我们试图解决以下2个问题:const与constexpr的区别?常函数的使用建议?一、const与constexpr的区别《c++ primer》中有对这个问题的详细介绍,但我一开始没怎么注意他嘛!那么我是怎么注意到这个问题的呢?实际开发中,经常会使用stl中的array容

2022-05-05 18:47:33 2973

原创 c++多态机制解析

c++多态机制解析提到”多态机制“这个概念,背过面经的同学都应该毫不犹豫地说出:**“多态分为静态多态和动态多态:静态多态机制依靠函数重载实现,动态多态依靠继承体系虚函数实现!”**这句话是面试的“金玉良言”,可一定要记住咯!那么我们分别从这两方面深入探讨一下其中的机制吧:“静态多态”的实现——name mangling(函数重载,overload)“动态多态”的实现——继承体系中的虚函数表(函数重写,override)一、“静态多态”的实现——name manglingname mangli

2022-04-28 20:50:16 1354 1

原创 c++类型内存分配规则

c++类型内存分配规则本文试图回答这样3个问题:c语言结构体内存对齐的规则?class、enum、union的作用和区别?VC等主流编译器究竟是如何管理一个类的分配空间的?一、c语言结构体内存对齐规则这是一个c语言类型内存分配最基本的问题了,我以前看到的一些说法经过自己的测试并不完全正确,学会了这个思路之后,以后再被问到这个问题就再也不怕了!首先看一段代码:class A{ char a;//1B double b;//8B int c;//4B};int m

2022-04-27 20:53:58 2009

原创 Linux yaml-cpp组件配置

Linux yaml-cpp组件配置linux里的配置方法就直接多了,没有眼花缭乱的界面和平台限制。。。1. 下载、构建、 编译:git clone https://github.com/jbeder/yaml-cpp.git # clone下来cd yaml-cppmkdir build # 一样的新建一个build路径中构建,要不cmake出的文件与原文件混在一起太乱了cd build cmake ..make # 按camke生成的makefile文件进行编译,编译生成可执行文件和静态

2022-04-06 21:04:34 2674

原创 VS2017 c/c++ YAML组件配置教程

VS2017 c/c++ YAML组件配置教程1. 关于YAML1.1 YAML是什么?YAML(读作 /ˈjæməl/)是一种配置文件解决方案,规定了一种配置文件的书写格式,对应的解析方法,和多种高级语言的API。1.2 为什么选用YAML?最近在为我毕业论文的数据集搭建一个标注工具。具体地,需要把图像中缺陷以人工圈画的方式标注;然后由工具转换成一个YAML配置文件进行数据转储;最后需要解析这个YAML文件并输出标注部分的一些信息,比如像素坐标、像素值信息等。我用过的同类解决方案还有xml、j

2022-04-06 21:01:33 2153

原创 数据结构——图

图论入门图是啥?拓扑结构上的定义:由节点和边组成,各节点可由边任意联结形成的拓扑结构。另外,一般来说不允许出现重复边(多条边的起点和终点重复)和自连环(一条边的起点和终点是同一个节点)。按照边是否有明确指向,可以将图分成有向图和无向图。可见,从直观印象来说,图就是一种广义上的树结构,允许树的任意层节点互连。因此图数据结构在计算机工程上有着重要而广泛的应用。说几个我目前看到的图结构应用吧!并发式图计算引擎/分布式图计算引擎:一种帮助后端业务架构开发者处理线程和数据依赖问题的计算引擎。在繁杂的后

2022-04-06 20:05:59 1242

原创 网络物理层方案与网络分层模型

网络物理层方案与网络分层模型最后,我们来到了整个网络的最底层——物理层。去简单看看想要真正实现互联网的强大功能,需要采用什么样的技术?和物理层比起来,之前讲过的所有层次都属于抽象层,为我们逐层抽象了各个接口。所以在最后的最后,我们需要整体领略一下这些抽象层是如何抽象下层的,这就是网络分层模型。一、 物理层的工作物理层是干啥的呢?它不像上面的层次那样搞一些抽象,要做的事情就是最朴实无华的:把数据从一个地方发送到远程的另一个地方。这个事情听起来很简单,但确实整个计算机网络协议栈最复杂的问题。这里我们从“怎

2021-09-04 08:19:55 237

原创 链路层网络

链路层网络一、 链路层网络概述1. 链路层所处位置学习了网络层你可能会觉得,网络层既然已经可以做到把报文发到指定的主机了,那要链路层有啥用呢?殊不知网络层的能力就是由链路层向上提供的。“链路”存在于每个网络设备之间(路由器与路由器,主机与路由器。。。)。正是因为有了这些链路确保了点到点的传输是可靠的,IPv6才有机会取消了网络层校验。总之,链路层位于网络层任意两直接连接的网络设备之间,提供可靠的服务;网络层是构成了世界整体互联网的骨架——网络的网络,向上提供尽力而为的服务。2. 链路层网络今天的

2021-09-04 08:19:43 188

原创 网络层其他协议简介

网络层其他协议简介IP协议是网络层最核心的协议,但除此以外,网络层还有众多协议保证了IP协议的正常运行。下面介绍几个其中最重要的。一、ARP协议与RARP协议当路由选择算法确定了下一跳路由器后,要做的事情就是把数据包通过链路层发送到下一跳路由器。可是通过链路层的发送还需要MAC地址。所以,ARP协议的作用就是通过网络设备IP地址求其对应的MAC地址。图1 ARP协议的工作过程ARP协议通过广播的形式在其所在局域网中发送ARP请求报文,以找到IP对应的设备(网卡);随后该设备的网卡再通过ARP响应

2021-09-04 08:19:28 639

原创 IP协议简介

IP协议简介IP协议真是一个复杂的协议。。想象一下它要直接控制数以亿计的各种网络设备,形成极其复杂的网络环境。详细介绍IP协议的方方面面并不是我们的重点,本篇只简要介绍IP协议的几个侧面。一、IP报文格式图1 IPv4与IPv6报文格式对比**源地址和目标地址:**IPv4和IPv6共有部分,这个必须得有,因为IP协议就是干这个的:将数据包从源IP发送到目标IP。**分片相关:**标识字段、标志字段、片偏移字段。稍后会看到IPv4的分片机制,用这3个字段保证IP分片后可以正确重组。但IPv6嫌

2021-09-03 18:08:30 174

原创 IP地址详解

IP地址详解接下来我们来看看网络层是怎么工作的,可以说网络层是整个计算机网络的心脏,起到了主要的抽象和转发报文作用。网络层最主要的协议就是IP协议,它是整个网络层的中心。除了IP协议,还有很多协议为更好的服务IP协议而工作。不过在介绍IP协议之前,我们必须先了解IP协议是如何对网络环境进行抽象的。这种抽象就是IP地址。一、IP地址的定义1. IP地址的意义网络设备指处在网络层工作互联的设备,包括网络层交换机(路由器)和各种形式的主机。IP协议为连接互联网的每一个网络设备分配一个IP地址。而IP协议

2021-09-03 18:06:48 7137 1

原创 Linux网络工具简介

Linux网络工具简介学习计算机网络不能只学习理论知识,同时必须学会网络工具的使用,用网络工具来快速判断自己程序的网络状态并发现问题。第一次使用网络工具前需要先下载安装:安装网络工具包net-tools网络工具包包含很多常用的网络命令,其中最常用的是ifconfig和netstatapt-get install net-tools//Ubuntuyum -y install net-tools//centos安装tcpdumpapt-get install tcpdump//Ubun

2021-09-03 17:59:25 456

原创 TCP高级机制

TCP高级机制之前总结过,TCP作为传输层协议有5大特性:**面向连接:**用三次握手和四次挥手机制建立连接后进行通信。**可靠:**确保报文一定可以到达对端,使用 TCP高级机制 来确保这一点。**字节流:**确保报文段之间是有序的,只有当前序报文都准备就绪时才会从内核缓冲区递交到用户区。**无边界:**连续的TCP报文段之间是没有边界的,需要上层协议正确解析。**传输层分组:**为了确保IP层的效率更高,TCP在传输层就对超过MSS字节的报文段进行拆分分组。其中第二条可靠性是本文要重点

2021-09-03 17:56:43 209

原创 TCP的连接与断开

TCP的连接与断开这一篇来具体分析一下TCP是如何连接并断开的。三次握手过程后建立一个TCP会话,四次挥手后断开一个TCP会话。所有TCP通信必须在TCP会话中进行。学习TCP连接与断开时,不仅要知道建立连接时通信双方发送的报文和过程,还需要掌握断开和连接时双方TCP协议的状态变迁。一、 TCP三次握手详解1. 过程详解图1 TCP连接的建立过程双方都处于CLOSE状态,服务端一般会先调用listen函数、accept函数以主动监听某个端口,调用listen、accept成功后,服务端处于

2021-09-03 17:47:58 3358

原创 TCP的连接与断开

TCP的连接与断开这一篇来具体分析一下TCP是如何连接并断开的。三次握手过程后建立一个TCP会话,四次挥手后断开一个TCP会话。所有TCP通信必须在TCP会话中进行。学习TCP连接与断开时,不仅要知道建立连接时通信双方发送的报文和过程,还需要掌握断开和连接时双方TCP协议的状态变迁。一、 TCP三次握手详解1. 过程详解图1 TCP连接的建立过程双方都处于CLOSE状态,服务端一般会先调用listen函数、accept函数以主动监听某个端口,调用listen、accept成功后,服务端处于

2021-09-03 17:38:21 3080

原创 TCP协议简介

TCP协议简介一、传输层协议简介经过最上层的HTTP、DNS等应用层协议后,我们应该思考,承载应用层协议的是什么呢?答案是传输层协议——TCP和UDP。图1 计算机网络协议栈传输层协议运作在网络层(IP)之上,为应用层协议提供一定运输层特性的服务。运输层的两大主要协议是TCP和UDP:**TCP:**向上层提供面向连接的、可靠的、基于字节流的服务。**UDP:**简单封装IP层,向上层提供尽力而为的、无连接的服务。二、TCP报文格式图2 TCP报文段格式源端口号&目标端

2021-09-03 17:26:04 369

原创 网络程序模型与应用层其他协议简介

网络程序模型与应用层其他协议简介HTTP和DNS是应用层最常用的两个协议,但还有很多其他协议处在应用层,它们各负责一个业务领域向用户提供各种服务。另外,我们考察基于应用层开发的网络程序时,应该首先确定它的网络程序模型:CS模型或P2P模型,然后再对其具体架构和技术细节进行研究!一、 网络程序模型现在的网络程序中,主要使用两大类模型:**CS模型(client-Server,客户端-服务器模型)**和 P2P(Peer to Peer,对等体模型)。其中最常用的还是前者,CS模型。1. CS模型C

2021-09-03 17:23:05 253

原创 HTTP 与HTTPS

HTTP 与HTTPS文章目录HTTP 与HTTPS一、HTTPS的概念1. HTTPS的要点/作用2. HTTPS的实现二、 TLS协议原理1. TLS协议的基本流程:1.1 证书与公钥的验证1.2 利用非对称加密原理产生会话密钥1.3 利用对称加密与摘要算法进行安全通信2. TLS四次握手原理上一篇提到,基本的HTTP协议是不安全的,有两个方面:明文传输,可能被截获、查看甚至篡改。无法验证服务端的权威性。针对以上问题,HTTPS对HTTP的安全性进行补充。一、HTTPS的概念1. HT

2021-09-03 17:21:23 274

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除