- 博客(254)
- 收藏
- 关注

原创 大语言模型应用之RAG技术解析
你好,我是醉墨居士,目前大语言模型可谓是火的一塌糊涂,其对人类社会的影响将是颠覆式的,而在大语言模型的应用侧有有一项技术正逐渐成为研究和应用的热点,这就是我们今天的主角RAG(Retrieval-Augmented Generation),中文翻译为检索增强生成。RAG结合了检索(Retrieval)和生成(Generation)两种方法,通过检索外部知识库中的相关信息来增强语言模型的生成能力,从而在复杂任务中表现出色。
2025-02-09 20:50:51
725

原创 PyTorch快速入门
你好,我是醉墨居士,今天分享一下PyTorch的基本使用的快速入门教程,希望能够帮助各位快速掌握PyTorch的使用PyTorch 是一个开源的深度学习框架,由 Facebook 的人工智能研究团队(FAIR)开发。它在学术界和工业界都被广泛使用,为深度学习的研究和应用提供了强大的支持。
2024-12-28 17:11:39
1381

原创 大语言模型理论基础
你好,我是醉墨居士,我们接下来对大语言模型一探究竟,看看大模型主要的核心的概念是什么LLM(大语言模型)采用了Transformer架构,其中比较重要的部分有tokenizer,embedding,attention训练流程:预训练 -> 微调 -> RLHF(基于人类反馈的强化学习)训练方式:分布式训练,数据并行,流水并行,张量并行高效推理能力。
2024-11-10 22:30:03
1217

原创 Go 语言实现基本区块链模型
你好,我是醉墨居士,在当今的技术领域,区块链技术无疑是一颗璀璨的明珠,其去中心化、不可篡改和安全可靠的特性吸引了无数开发者的目光,在这篇博客中我将介绍如何使用强大和高效的Go语言开发一个极简的区块链模型。
2024-08-11 15:50:29
442

原创 Go语言实现依赖注入
你好,我是醉墨居士,欢迎来到我的博客,今天带领大伙使用Go语言实现依赖自动注入,我们不会使用其它的第三方库,项目核心代码不到100行,是Go语言初学者难得的精简项目至此,各位我们已经一起完成了这个依赖注入的小项目我是醉墨居士,我们下篇博客见。
2024-08-07 00:28:32
746

原创 Go语言实现多协程文件下载器
你好,我是醉墨居士,最近在开发文件传输相关的项目,然后顺手写了一个多协程文件下载器,代码非常精简,核心代码只有100行左右,适合分享给大家学习使用。
2024-08-04 16:51:22
676

原创 Linux内核网络
你好,我是醉墨居士,因为Linux内核涉及的内容极多,我们初学者如果一上来就开始深挖细节,很有可能会在Linux内核代码的茫茫大海之中迷失自我。本篇博客希望可以帮助大家先有个全局的视野,剩余的细节内容,根据沿着全局的脉络去学习,可能会有意想不到的效果🫠。
2024-02-25 11:31:07
814

原创 从零实现分布式服务系统
分布式系统具有高可靠性、高性能、可扩展性、灵活性、数据共享、可靠性和地理分布等优点,使得其在各种应用场景下都具有巨大的优势,当然分布式系统实现复杂度要高于单体系统🫠项目代码使用纯粹的Go语言标准库实现,不借用任何其它第三方库😁我是醉墨居士,废话不多说,我们现在开始吧🤗恭喜你,我们一起完成了简易分布式系统的开发,麻雀虽小,五脏俱全😉希望这个项目能让你有所收获😊如果有什么错误,请你评论区或者私信我指出,让我们一起进步✌️。
2023-12-18 22:38:18
499

原创 Go语言手搓深度学习的正向传播和反向传播
正向传播是指从神经网络的输入层开始,通过逐层计算和传递,将输入数据一直传递到输出层。在每一层中,通过对输入数据进行加权求和并应用激活函数,得到该层的输出。这个过程可以看作是将输入数据在网络中前进(向前传播),直至得到模型的预测结果。反向传播是指根据模型的预测结果和实际标签之间的差异,从输出层向输入层反向计算梯度,并利用梯度来更新网络参数。这篇博客我将使用Go语言实现正向传播和反向传播,帮助你理解其底层的运转规律项目代码使用纯粹的Go语言标准库实现,不借用任何其它第三方库。用轮子是生活,造轮子是信仰。
2023-12-02 12:41:47
1322

原创 Go语言手搓大模型分词器tokenizer
大模型的tokenizer用于将原始文本输入转化为模型可处理的输入形式。tokenizer将文本分割成单词、子词或字符,并将其编码为数字表示。大模型的tokenizer通常基于词表进行编码,使用词嵌入将单词映射为向量表示。tokenizer还可以将输入文本进行填充和截断,以确保所有输入序列的长度一致,以便于模型的批量处理。这篇博客使用纯粹的Go语言标准库,不借用任何其它第三方库。用轮子是生活,造轮子是信仰。
2023-11-29 21:06:55
1472

原创 手搓docker - 实现篇
Index of /ubuntu-cdimage/ubuntu-base/releases/23.04/release/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。Index of /ubuntu-cdimage/ubuntu-base/releases/23.04/release/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror。
2023-07-28 16:14:55
2274
原创 LeetCode讲解篇之456. 132 模式
这题需要我们尝试找到三个数,假设三个数的下标分别是i,j,k,需要满足条件:i < j < k && nums[i] < nums[k] < nums[j]这类型的题目我们一般尝试使用控制变量法,针对这题我们可以将 j 和 k 控制住,用一个最大的 k 来表示,那么我们这题就转化为是否能找到三个数满足条件:i < maxK && nums[i] < nums[maxK]对于maxK,我们可以使用单调栈求解题目链接https://leetcode.cn/problems/132-pattern/des
2025-03-24 10:42:41
225
原创 Golang 刷算法题:标准输入处理的常见陷阱与解决方案
你好,我是醉墨居士。在最近使用 Golang 刷牛客网算法题的过程中,处理标准输入时遇到了不少棘手的问题。这些问题一度让我的解题之路变得磕磕绊绊,但通过不断地探索和尝试,我成功找到了有效的解决方案。现在,我迫不及待地想把这些经验分享给大家,希望能帮助各位在使用 Golang 刷题时更加顺畅,少走一些弯路在处理标准输入时,建议优先使用 bufio.NewScanner(os.Stdin) 来读取数据。因为它比 fmt.Scan 更快,能够有效避免在一些题目中因读取输入而造成的超时问题。
2025-02-15 11:36:01
788
原创 LeetCode讲解篇之88. 合并两个有序数组
使用倒序双指针,我们仅需要将nums1和nums1中最大值放入到nums1中的相应的放置位置上即可。
2025-01-27 14:03:50
254
原创 Ubuntu下PyTorch开发环境配置
你好,我是醉墨居士,今天在Ubuntu上配置一下PyTorch开发环境,同时记录一下我的经历,希望能够让你快速完成开发环境的配置,节约宝贵的时间至此,少年恭喜你,已经完成了开发环境的配置,希望你能在未来深度学习的征程中一帆风顺。
2024-12-28 13:23:48
572
原创 numpy快速入门
你好,我是醉墨居士,好久没发布新博客了,今天给大家带来的是numpy的快速入门,帮助大家用最短的时间快速学习使用numpy今天这期博客就到这里,大家最好看着例子敲一下代码,这样可以加深印象。
2024-12-02 22:03:02
398
原创 Rust 力扣 - 740. 删除并获得点数
那么在切片的[0, i]范围内选择元素的最大值 = max(i号索引元素 + [0, i - 2]范围内选择元素的最大值, [0, i - 1]范围内选择元素的最大值)那么这题就转换成了打家劫舍这道题,也就是求选择了切片中某个下标的元素后,该下标相邻元素就不能选择,求最终能选择的元素之和的最大值。首先对于这题我们如果将所有点数装入一个切片f中,该切片f中的i号下标表示所有点数为i的点数之和。
2024-11-26 14:10:53
571
原创 Rust 力扣 - 198. 打家劫舍
即f(i)为选择i - 1号房屋的最大金额 和 选择i - 2号房屋的最大金额 的最大值。假设f(i)表示在[1, i]号内的房屋内进行偷盗能够获得的最高金额。
2024-11-23 15:54:08
443
原创 Rust 力扣 - 2266. 统计打字方案数
这题可以先求按了多少次相同连续的按钮,所有的连续相同按钮表示的方案数的乘积就是本题答案。我们的关键问题就转换成了按n个连续相同按钮表示的方案数。设f(i)表示按i个连续相同按钮表示的方案数。
2024-11-23 15:30:10
378
原创 Rust 力扣 - 2466. 统计构造好字符串的方案数
题目可以转换成爬楼梯,即从第零层开始,每次能够向上爬zero层或者向上爬one层,最终能够爬到[low, high]层的种数总和。第n层是从第n - zero层或者第n - one层爬上来的,所以我们从最底层开始向上爬,记录过程中爬到每一层的方案数。当爬到[low, high]层内的时候进行结果计数。
2024-11-20 22:22:36
305
原创 Rust 力扣 - 377. 组合总和 Ⅳ
而总和target - nums[j]的元素组合个数 可以由 总和为target - nums[j] - nums[k]的元素组合个数 转换而来,其中k为nums所有元素的下标。总和为target的元素组合个数 可以由 总和为target - nums[j]的元素组合个数 转换而来,其中j为nums所有元素的下标。这是一种从结果出发,不断转换到我们已知条件的一种操作,通过这题,希望大家能够有所感悟。依次类推,转换成我们已知的条件 总和为0的元素组合个数为1。
2024-11-20 17:54:47
317
原创 Rust 力扣 - 746. 使用最小花费爬楼梯
所以爬到第N层的最小花费 = 第N - 1层向上爬和第N - 2层向上爬的最小花费。我们使用a,b分别记录n - 2层向上爬的最小花费,n - 1层向上爬的最小花费。到达楼梯顶第N层,只能从N - 1层或者N - 2层向上爬。
2024-11-20 15:59:14
468
原创 Rust 力扣 - 70. 爬楼梯
所有到达第n层的方法种数 = 到达第n - 1层的方法种数 + 到达第n - 2层的方法种数。到达第n层只能是从n - 1层爬1层上来的,或者是从n - 2层爬2层上来的。
2024-11-20 13:56:01
567
原创 Rust 力扣 - 1493. 删掉一个元素以后全为 1 的最长子数组
我们使用一个left指针指向子数组的左边界,然后我们遍历子数组的右边界,我们记录子数组中0元素的位置idx0。当右边界遍历到0时,将左边界右移到idx0 + 1,并尝试刷新子数组的最长长度。本题我们能转换成求只包含一个0的子数组的最长长度。当右边界遍历结束,尝试刷新子数组的最长长度。如果数组中不存在0,则结果为数组长度减一。
2024-11-04 00:31:28
362
原创 Rust 力扣 - 3090. 每个字符最多出现两次的最长子字符串
我们首先向右移动右指针,将字符加入到哈希表中进行计数,如果当前加入的字符在窗口中超过3个,则右移左指针从窗口中移除元素,直到左指针把当前字符从窗口中移除一个。本题使用滑动窗口进行求解,使用左指针和右指针分别表示窗口的左边界和窗口的右边界,使用哈希表记录窗口内的字符及其对应数量。在移动过程中记录窗口长度的最大值,窗口长度的最大值即为本题结果。
2024-11-03 17:42:02
502
原创 Rust 力扣 - 1984. 学生分数的最小差值
假设当前遍历的下标为i则,以 i 下标为最小值的学生分数的最小差值为nums[i + k - 1] - nums[i]原数组 nums 排序,遍历nums中下标为[0, nums.len() - k]的学生分数。取最小差值的最小值即为本题结果。
2024-11-03 16:44:44
411
原创 Rust 力扣 - 2134. 最少交换次数来组合所有的 1 II
我们需要遍历长度为k的窗口,找到窗口中0的数量的最小值即为答案。需要注意的是数组是环形的,我们的窗口也应该是环形的。我们首先计算数组中长度为0的1的个数k。
2024-11-02 20:24:34
424
原创 Rust 力扣 - 1297. 子串的最大出现次数
越短的子串出现的次数越多,我们只需要求某个长度为min_size的子串出现的次数,并且该子串中不重复字符小于等于max_letters的数量。遍历长度长度为min_size的子串,然后将不重复字符小于等于max_letters的子串加入哈希表中计数。然后返回哈希表中满足约束条件的子串的数量最大值。
2024-11-02 12:45:45
667
原创 Rust 力扣 - 1423. 可获得的最大点数
我们遍历长度为(卡牌数量 - k)的窗口,记录窗口内的所有点数之和的最小值。题目所求结果存在下述等式。
2024-11-01 12:29:54
529
原创 Rust 力扣 - 2461. 长度为 K 子数组中的最大和
我们遍历长度为k的窗口,用一个哈希表记录窗口内的所有元素(用来对窗口内元素去重),我们取哈希表中元素数量等于k的窗口总和的最大值。
2024-11-01 12:05:36
409
原创 Rust 力扣 - 2841. 几乎唯一子数组的最大和
我们遍历长度为k的窗口,用一个哈希表记录窗口内的所有元素(用来对窗口内元素去重),我们取哈希表中元素数量大于等于m的窗口总和的最大值。
2024-11-01 11:49:30
475
原创 Rust 力扣 - 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串
长度为k的二进制子串所有取值的集合为[0, sum(k)],其中sum(k)为1 + 2 + 4 + …+ 1
2024-11-01 10:50:49
484
原创 Rust 力扣 - 1052. 爱生气的书店老板
我们遍历长度为minutes的窗口,我们需要记录窗口内的生气覆盖的客户数量,同时记录全局不生气覆盖的客户数量,遍历过程中刷新窗口内的生气覆盖的客户数量最大值。结果为全局不生气覆盖的客户数量 + 窗口内的生气覆盖的客户数量最大值。
2024-11-01 00:01:49
235
原创 Rust 力扣 - 2379. 得到 K 个黑块的最少涂色次数
我们遍历长度为k的窗口,我们只需要记录窗口内的白色块的数量即可,遍历过程中刷新白色块的数量的最小值。本题可以转换为求长度为k的子数组中白色块的最少数量。
2024-10-31 23:43:40
445
原创 Rust 力扣 - 2090. 半径为 k 的子数组平均值
半径为 k 的子数组平均值 等价于 子数组长度为2 * k + 1的总和 除于 2 * k + 1。我们遍历长度为2 * k + 1的窗口,我们只需要记录窗口内的平均值即可。
2024-10-31 23:32:02
480
原创 Rust 力扣 - 1343. 大小为 K 且平均值大于等于阈值的子数组数目
我们遍历长度为k的窗口,我们只需要记录窗口内的总和即可,遍历过程中记录总和大于等于k * 阈值的子数组数目。长度为k且平均值大于等于阈值的子数组数目 等于 长度为k且总和大于等于k * 阈值的子数组数目。
2024-10-31 22:50:50
470
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人