- 博客(95)
- 收藏
- 关注
原创 深度学习入门(四):误差反向传播法
上一篇文章深度学习入门(三):神经网络的学习中,神经网络参数的学习是通过数值微分求梯度实现的,该方法虽然简单,但也有一个明显的问题就是计算费时。本文介绍一种高效计算参数梯度的方法——误差反向传播法。注意,误差反向传播法本质上是一种梯度计算的技术,而梯度下降法是一种优化算法。zt2txyz=t^2 \\t=x+yzt2txy回忆以前学过的求复合函数的导数的性质:复合函数的导数可以用构成复合函数的各个函数的导数的乘积表示。
2025-04-06 15:35:53
647
原创 深度学习入门(三):神经网络的学习
机器学习的过程通常分为学习(从训练数据中自动获取权重参数的过程)和推理(利用学习到的权重参数对新的数据进行预测)两个环节。本文将主要介绍学习的过程。
2025-04-04 10:31:30
845
原创 深度学习入门(二):从感知机到神经网络
上一篇文章我们学习了感知机,因为它和神经网络有很多共同点,所以这一篇正式进入神经网络一定也会很顺畅。以a11a11a11w111x1w121x2b11a11w111x1w121x2b11A1XW1B1A1XW1B1A1a11a21a31A1a11a21a31Xx1x2Xx1x2W。
2025-03-30 11:05:01
871
原创 优化基础(四):如何找到极值点?
在上一篇文章中我们提到,边界点里有一种特殊的点叫极值点,它们拥有一些很好的性质:局部最大/小值或全局最大/小值,将会在这些极值点中诞生。回忆一下单纯形法(想不起来的小伙伴可以参考我的文章),它的几何意义就是在极值点之间跳跃寻找最优解。那么如何找到这些极值点呢?本文通过一个例子来探讨一下。
2024-06-06 09:46:18
1414
2
原创 优化基础(三):内部点、边界点、极值点、外部点
从边界点来看,凸集的边界点一定也可以找到超平面(supporting hyperplane)把它撑(分离开)到某一边去。非凸的在某些点找不到一个平面可以把它撑起来(分离)。一个开集(一个不包含边界的子集),而任何足够小的邻域(即这个点周围的任意小的区域)都包含集合内的点和集合外的点。更数学的表述方式是,极值点不能表示为集合中其他点的凸组合。如下图所示,A点是极值点,B点是普通的边界点。能够使得我们画的这个球里的所有点,都仍然属于。B点位于它旁边两个点的连线上,但A点不是。的内部点,当且仅当存在一个。
2024-06-03 09:58:01
923
原创 优化基础(二):线性组合、仿射组合、锥组合、凸组合、线性集合、仿射集合、锥集合、凸集合的理解
组合侧重于描述由一些基点生成新的点,强调的是不同点的权重和几何位置。集合侧重于描述许多个点形成的形状,强调的是完整性和连通性。
2024-05-31 19:40:38
2046
原创 优化基础(一):hyperplane, half space, normal vector, polyhedron set, polyhedron, polytype的含义
在看一些进阶的运筹知识时,会有一些专业术语涌上来。以前我的心态是,这种能绕开就绕开,看着头大,大多数博客和书籍一堆公式直接把我这个小弱鸡劝退了,这次在B站学习方述诚老师的《introduction to linear programming》课程时,终于把一些术语听懂了。歪个题,方老师的课讲的真的很棒,建议运筹的小伙伴们都能系统的去刷一遍。
2024-05-30 15:06:14
1266
原创 梯度下降法
无约束优化问题常用的求解算法有梯度下降法(基于迭代)、最小二乘法(基于解析解)、牛顿法&拟牛顿法(基于迭代)。今天先介绍最常用的梯度下降法。
2024-04-25 20:44:15
1031
原创 运筹学基础(七):拉格朗日松弛(Lagrangian relaxation)
如果问题具有linked constraints,那么拉格朗日松弛后可以使问题能够被分解,进而可以降低问题的复杂度;拉格朗日松弛后得到的问题的下界要大于等于直接将01整数变量松弛为[0,1]连续变量的下界;采用拉格朗日松弛后我们会得到拉格朗日乘子,它反应了对偶的信息,可以做很多事情。假设约束(1.1)是难处理的约束,约束(1.3)是容易处理的约束。该问题等同于:怎么求解拉格朗日松弛问题的对偶问题,常用的方法是。即松弛问题是原问题的一个下界,对偶问题是原问题最大的下界。其本质是在松弛问题的基础上,
2024-04-19 16:28:30
3110
原创 反转链表:递归解法
先直接上代码:怎么理解呢?我们一行一行的来看!首先是badcase部分,当链表为空,或者只有一个节点的时候,直接返回就可以了,也没什么好反转了!最后三行就很神奇的,初次刷题是懵的状态,看了东哥的解释才回过神来。对于递归的问题,最关键的是明确递归函数的定义。在上面的函数中,reverseList表示给定一个链表,对其进行反转,并输出反转后的链表的头节点。然后来看last是个什么东西:现在离我们想要的结果还缺把2指向1,于是我们写了:以及把head指向空:延续上面的思路,明确递归函数的定义。在这个问
2024-04-11 16:06:26
417
原创 304. 前缀和技巧中的边界值处理
题目如下,其实并不难,属于小而美的前缀和技巧中的体型。因为我之前做过这道题,所以重刷也马上就能写。但是对比我写的和之前看别人写的,明显我的代码不够简洁,一个核心的差异在于对DP数组的定义上。只要改一下DP数组的定义即可:存储以(0,0)为起点,到(i-1, j-1)的数组之和。先看下我的代码,我对DP数组的定义是:存储以(0,0)为起点,到(i, j)的数组之和。将DP数组计算的过程放在__init__下面,总是只计算一次,然后重复调用其结果即可/修改以后的代码如下,明显简洁很多!
2024-04-09 09:46:19
216
原创 运筹学基础(六):列生成算法(Column generation)
学习列生成之前,有一些前置基础需要理解,不然就没法继续往下学了。所以为了写这篇文章,我提前铺垫了3篇文章帮助自己把基础捡起来!运筹学基础(一)求解线性规划的单纯形法详解运筹学基础(四):单纯形法中检验数(reduced cost)的理解运筹学基础(五):对偶问题及其性质今天终于可以进入正题了!
2024-04-08 13:08:28
2929
原创 运筹学基础(五):对偶问题及其性质
注意:例题1里面的原问题是maxmaxmax,对偶问题是minminmin,例题2反过来了。对偶问题max约束的符号,与原问题变量的符号相反(=和无约束互反);对偶问题max变量的符号,与原问题约束的符号相同。maxz′5y14y26y3y12y2≥2y1y3≤3−3y12y2y3≤−5y1−y2y31y1≥0y2≤0y3无约束。
2024-04-07 16:47:36
3206
原创 运筹学基础(四):单纯形法中检验数(reduced cost)的理解
在前文运筹学基础(一)求解线性规划的单纯形法详解中,我们直观的理解了单纯形法其实是在可行域的顶点上搜索的过程。(这篇文章没有通过列单纯形表来讲述,而是选择了一种更符合直觉的方式,我觉得这对于初学者而言是更好理解的。单纯形表感觉还是有点绕…)提到单纯形法,就不得不提一下检验数了,前文一带而过了,这篇文章单独拎出来聊一下。因为未来的学习中,很多更高阶的内容还会涉及到检验数的概念。
2024-04-07 14:46:04
6418
原创 运筹学经典问题(八):CVRP和VRP-TW
给定一个图,图上的点代表客户,边代表客户之间的路线,边的权重代表客户之间的距离,点上的数字代表每个用户的需求量。如果只是上面的模型,可能会出现下图这种解,: 假设我们的问题是车辆去客户那里取货,需要一个约束去消除这种不包含仓库的子环。这也是VRP建模的一个略难的约束。会有图上的哪些边被选中,形成。没有约束车辆的容量限制!
2024-04-01 15:40:29
1624
原创 运筹学基础(三):求解整数规划的切平面法(cutting plane method)
先将整数规划问题松弛为线性规划问题,然后割掉线性规划问题可行域的一部分(),使得线性规划问题的最优解在原整数规划问题的。(如果有小伙伴和我一样一时间没有想起来什么是。因此,割平面法的核心问题在于。(切割方程不是唯一的)。
2024-03-30 17:30:40
2036
原创 LCR 155:将二叉搜索树转化为排序的双向链表
将一个 二叉搜索树转化为一个 已排序的双向循环链表;节点的左指针指向前驱(上一个比自己小的节点),右指针指向后驱(下一个比自己大的节点)。最后要求返回链表中最小元素的指针。
2024-03-28 09:57:55
357
原创 运筹学基础(一)求解线性规划的单纯形法详解
大学的《运筹学》课程中,手算单纯形法是期末的必考题了!(记得期末考试前一周,几个经常逃课的同学来我宿舍楼下,叫了辆车载我去星巴克给他们讲解这个算法,活活讲了一个多小时他们才听懂,不知道最后及格了没哈哈!)当时已经觉得是信手拈来了,但是时间久了+计算过程本身也比较繁琐,慢慢就忘了。后面为了应付面试,又拾起过,但是面完试细节又给忘了,只记得是在可行域的顶点上来回搜索。这次想完整的梳理一篇文章(本文是跟着某位大佬的博客。
2024-03-28 09:18:22
7410
8
原创 动态规划:编辑距离和最长公共子序列解法对比
以下两种定义方式都行,看个人习惯。我个人更喜欢右边的方式!因为python中数组的切片word[i:j]是左闭右开区间,用dp(i, j)表示从word1[i:]转化为word2[j:]的定义更简洁。
2024-03-24 13:54:25
468
原创 二叉树的最近公共祖先
这道题去年刷过,但是今年来做又没写对,写篇文章从头到尾梳理下思路,强化下记忆。(愿佛祖保佑信女,面试遇到此题时可以信手拈来。。。。
2024-03-19 15:51:13
234
原创 股票买卖问题:状态定义的误解与思考
iii:第iii天;kkk:交易的最大次数(这里有很多歧义,理解部分重点解释);sss:持有状态,0代表不持有,1代表持有。举个例子,dp[3][1][0]代表在第三天,我至今最多进行了1次交易,现在没有持有的最大利润是多少。
2024-03-17 11:34:08
866
1
原创 算法时空复杂度分析:大O表示法
算法题写完以后,面试官经常会追问一下你这个算法的时空复杂度是多少?(好像作为一名算法工程师,我日常码代码的过程中,并没有太注意这个,惭愧~但是找做后端开发的男票求证了一下,他们日常工作确实会去考虑这种问题)那么无论是为了应付面试,还是为了未来码代码可以精益求精,都还是认真的学一下时空复杂度分析方法吧!对于为什么需要时空复杂度分析,而不是直接跑一下代码看看,看到王争大佬在《数据结构与算法之美》(墙推)里给的两个原因是:测试结果依赖测试环境:机器的配置会十分影响你跑出的结果;
2024-03-13 14:59:52
1370
2
原创 新坑出炉:同一个函数不要传入两个一模一样的引用类型参数
1. 可变对象:对一个变量进行操作时,其值是可变的,但是对值的修改并不会引起新的对象,即地址是不会变的,只是地址中的内容发生了变化或者地址得到了扩充!2. 不可变对象:可以理解为一个萝卜一个坑,地址中的值是不会变的,要变就变地址!怎么记呢?可变对象和不可变对象所说的「可变」「不可变」都是针对值而言的。值可变,说明地址不变,则是引用类型!同理,不可变对象说明值不能动,那就是值类型了。
2024-03-06 14:41:40
392
原创 Python里的全局变量、局部变量、类的self.*
全局变量没有在任何函数内部定义,并且具有全局范围的变量;局部变量的定义:在函数内部定义的变量,范围仅限于该函数;是在一个函数内部声明一个全局变量,以便在函数内部对全局变量进行修改,这个全局变量本身已经定义过了,而不是我想当然认为的定义了一个全新的全局变量!‼️如果没有将其声明为全局变量,则在函数内部更改或创建的任何变量都是局部变量。当全局变量和局部变量的命名一样时,在一个函数内部还是会使用自己内部的局部变量;
2024-03-04 19:51:59
952
原创 运筹学经典问题(六):设施选址问题
以物流业的航空站点选址为例,如果航空站点开通的很多,客户的服务质量会变好(更多的航空件可以保障更好的时效),但是显然企业的成本会上升。反之,如果开通的航空站点太少,虽然企业成本下降了,但客户服务质量会变差。因此,该问题本质上是在做。
2023-12-14 11:17:31
2101
原创 运筹学经典问题(五):多商品流运输问题
前面介绍了(MCNF)问题,今天要介绍的多商品流运输问题(Mulit-commodity Transportation Problem, MCTP)与MCNF的唯一差异别:MCTP要求商品直接从供应商运送到客户,没有中间流转的路径。
2023-12-14 10:36:27
1134
原创 运筹学经典问题(四):多商品网络流问题
多商品网络流问题(Multicommodity Network Flow, MCNF)是指在一个图网络中,多个商品从各自起点运输到各自终点的问题。更具体的,给定一个图网络GVAK:表示商品的集合;sktkdk:表示商品k的起点、终点和需求量;uij:弧段ij∈A的容量;cijk:商品k在弧段ij∈A上流动的单位成本。MCNF问题的目标就是在图网络中,找到一条使得总运输成本最低,且能满足各个商品需求量的路径。
2023-12-13 10:11:31
2732
原创 运筹学经典问题(二):最短路问题
给定一个图(有向图或无向图)GVEV是图中点的集合,E是图中边的集合,图中每条边ij∈E都对应一个权重cij(距离或者运输成本等),给定一个起点u和一个终点z,最段路问题就是寻找一条从s出发,到达z的距离最短或者成本最低的路径。
2023-12-12 09:22:18
2193
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人