为什么写博客
为什么写博客? 笔记。帮助自己日后快速回忆起学过的内容 为有同样疑问的学习者答疑解惑(虽然现在都用AI了) 费曼学习法,在写博客的同时自己也在整理思路和语言,加深理解 博客在某种意义上也算是“养成系游戏”,可以从中获得成就感满足感,激励自己坚持下去
Zero to Hero学习笔记
1.实现一个小型自动微分12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697class Value: def __init__(self, data, _children=(), _op='', label=''): self.data = data self.grad = 0.0 self._backward = lambda: None self._prev = set(_children) self._op = _op self.label = label def __repr__(self): return...
提示词工程(二)
DAIR.AI 提示工程指南 个人总结1.模型基本设置 Temperature:决定模型输出是稳定保守,还是随机,有创造性。对于质量保障,数据分析等确定性任务,建议将温度设置为0;对于创意写作等需要多样性的任务,可以适当提高温度。 Top_p:同样衡量模型输出的确定性。使用Top-p意味着只有词元集合(tokens)中具有top_p概率质量的才会被考虑用于响应(0.1 表示只考虑包含在最高 10% 概率质量中的 token),因此较低的top_p值会选择最有信心的响应。这意味着较高的top_p值将使模型考虑更多可能的词语,包括不太可能的词语,从而导致更多样化的输出。一般建议是改变 Temperature 和 Top P 其中一个参数就行,不用两个都调整。 Max length:限制模型输出的最大长度,防止输出过长或过短。 Stop sequence:指定一个或多个停止序列,当模型生成这些序列时,模型将停止生成更多的文本。这对于控制输出的结构和内容非常有用。 Frequency penalty:惩罚模型重复使用相同的词语或短语,通过给重复数量多的 Token...
提示词工程(一)
吴恩达“提示词工程”课程笔记0.两种大语言模型(LLM) Base LLM:基于Next Token Prediction任务进行训练,主要功能是预测文本中的下一个词,训练完成后不再更新,无法学习新知识。此外,Base LLM比起完成任务更像是续写原文,在给定一个提问后,它可能会预测出后续的一系列问句而不是回答问题。 Instruction-tuned LLM:通过给Base LLM输入“问题-答案”序列对,微调原模型,能够更好地理解和执行用户指令,回答问题,执行任务,性能更好。现代的LLM通常是Instruction-tuned...
从Next Token Prediction到智慧涌现
原文链接:https://www.zhihu.com/question/1968361285579150015/answer/1988303137023467994 大模型的本质原理不是概率统计,而是压缩+模拟,或者说,它是在某个临界点从统计跃迁到了智能压缩,而这个临界点即为所谓的“智慧涌现”,或Grokking现象。 预测不是目的,而是手段,是模型将客观世界的规律与表征压缩到自己固定大小的参数中的手段 对模型的大量预训练以及强化学习手段(RLHF等)实际上都是在进行类似于蒙特卡洛树搜索的操作,基于梯度的参数随机优化方法与庞大的参数量,从模拟的角度看,与蒙特卡洛方法“随机穷举”的思想有异曲同工之妙。 提示词工程可以看作是一种“推理时梯度下降”,精心编写的提示词实际上在输入层就在一定程度上实现了特征的解耦与提炼,使模型在一开始就达到了在粗糙的提示词下需要经过前向推理以提取特征才能达到的某种“中间状态” 模型的思考能力(CoT)与逐步的逻辑推理是追求极致优化(降低loss)的必然结果,这一结果的产生是建立在大量的数据支持的基础上的(Scaling...
英文版B站
这几天发现英文版B站的翻译做得挺不错,从视频标题,弹幕,字幕到评论全都进行了翻译,并且相当地道,看得出是在尽量寻找英文互联网语境下的对应的词。比较有意思的一点是部分视频还适配了“AI语音翻译”,也就是把视频中的中文语音变成英文的,同时保留原来的音色语调。切换方法也很简单,直接在B站设置里切换语言就行。不知道刷英文版B站对学英语会不会有帮助呢…😂
从1开始的LSTM
为什么是“从1开始”?因为RNN的逻辑实在太绕,而且正逐渐被Transformer取代,所以我直接调用了nn.LSTM,重点在于数据集处理和训练,预测函数 123456789101112131415161718192021222324252627282930import torchfrom torch import nnimport collectionsimport reclass SimpleRNNModel(nn.Module): def __init__(self, vocab_size, num_hiddens): super().__init__() self.num_hiddens = num_hiddens # 1. Embedding 层:把字符 ID 转成稠密向量 self.embedding = nn.Embedding(vocab_size, num_hiddens) # 2. RNN 层:核心循环动力 self.rnn = nn.LSTM(num_hiddens,...
从0开始的ResNet
123456789101112131415161718192021222324import torchimport torchvisionimport torchvision.transforms as transformsimport torch.nn as nntransform_train=transforms.Compose([ transforms.RandomCrop(32,padding=4), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),])transform_test=transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994,...
从0开始的Transformer
基于pytorch,从底层实现transformer1234import torchfrom torch import nnimport mathimport re 1device=torch.device('mps') 读取数据集,这里使用”time machine” 12345def read_time_machine(): # 这里假设你已经有了 txt 文件,或者直接从网络下载 with open('timemachine.txt', 'r') as f: lines = f.readlines() return [re.sub('[^A-Za-z]+', ' ', line).strip().lower() for line in...