3.2k 词
进程和线程的区别是什么(面试题)? 本质区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位(CPU调度的最小单位) 在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小 稳定性方面:进程中某个线程如果崩溃了,可能会导致整个进程都崩溃。而进程中的子进程崩溃,并不会影响其他进程。 内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源 包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线 程序的执行过程与进程的诞生 我们用高级语言(如 C++ 或 Java)编写的程序,在编译后会成为机器可以理解的二进制代码,但此时它仍是一个被动的文件。只有当它被加载到内存并开始执行时,才成为一个“进程”。 核心观点: 程序在被执行...
AI
694 词
AI模型画图体验:速度、细节与画质的权衡使用gemini 2.5 flash Image -preview生成模型,整体体验让人印象深刻,尤其是在速度和细节处理方面。 首先,最直观的感受是生成速度非常快,比之前用过的GPT-5感觉要迅捷不少,几乎是瞬间出图,大大提升了创作效率。 其次,在图像质量上,这款模型对脸部和阴影等细节的处理尤为出色。它能精准捕捉复杂的光影变化,让人物面部和环境阴影看起来非常自然且富有层次感,大大增强了图像的真实感和艺术性。 在不同平台的使用体验上,无论是AI Studio还是Web端,我感觉两者之间并没有明显的区别。这说明模型的核心算法和性能在不同端口都保持了高度的一致性,确保了用户无论在哪里创作,都能得到稳定的高质量输出。 不过,也有一些可以改进的地方。首先是画质,感觉图像整体的清晰度还有提升空间,有时候会显得不够锐利。其次,目前模型缺少微调工具。如果能提供类似“局部修补”或“定向调整”的功能,允许用户对不满意的地方(比如某个眼神、某个手势)进行精确修改,那将是极大的进步。 总的来说,这款模型在速度和细节表现上非常突出,但在画质和后期微调的灵活性上还有待...
4.6k 词
Homework-baseline Q&A 作业的 baseline 中看到 loss 在训练过程中不收敛,甚至来回震荡,通常是由以下几个核心原因造成的,其中学习率(Learning Rate)过高是最常见的主谋。 1. 学习率 (Learning Rate) 过高 现象:Loss 在训练初期迅速下降,但很快就开始在一个较高的值附近剧烈震荡,甚至可能突然增大(发散)。 原理:想象一下你正在下山(寻找 loss 的最低点)。学习率决定了你每一步迈出去的“步子”有多大。 如果步子太大(学习率过高),你可能一步就迈过了山谷的最低点,跑到了对面更高的山坡上。下一步你再往回迈,又可能再次越过最低点。如此反复,你就在谷底来回“横跳”,永远无法稳定在最低点。 解决方案: 调低学习率:这是最直接的方法。尝试将当前的学习率降低一个数量级,例如从 0.01 降到 0.001,或者从 1e-4 降到 1e-5,看看 loss 曲线是否变得平滑并持续下降。 使用学习率衰减 (Learning Rate Decay):在训练初期使用较大的学习率让模型快速收敛,随着训练的进行,逐渐减小...

MLP

9k 词
在 Embedding 里 dim 的意思dim 表示你操作的 维度索引。张量有很多维度(axis),dim 决定了你在哪个维度上做操作。 举例: 1emb.shape = (32, 3, 2) 这里 3 个维度的含义分别是: dim=0 → batch 维度(32 个样本) dim=1 → 序列长度(每个样本 3 个索引) dim=2 → embedding 向量维度(每个索引是 2 维) Embedding 查表 (Embedding Lookup)思路拆解 X 的形状 X.shape = (32, 3) 含义:一共有 32 个样本(batch),每个样本里面有 3 个索引。 C 的形状 C.shape = (27, 2) 含义:这是一个查找表(embedding table),一共有 27 行,每行是 2 维向量。 C[X] 的运算 对每个 X[i, j],用它作为索引,去 C 里取对应的那一行(形状 (2,))。 所以一行 X [a, b, c] 会变成 C[[a, b, c]],形状 (3, 2)。 整个 32 个样本就堆叠起...
未分类
7.1k 词
微调(Finetuning) vs. 提示(Prompting):大型语言模型的两种方法探讨了使用大型语言模型(LLM)的两种主要历史期望和由此产生的技术方法:微调(Finetuning) 和 提示(Prompting)。这两种方法会导致大型语言模型的结果和应用截然不同。 对大型语言模型的两种期望人类历史上对大型语言模型有两种不同的期望: 成为专家(微调):第一个期望是让大型语言模型成为解决特定类型问题的专家,尤其是在自然语言处理(NLP)任务中。 范例:调整大型语言模型以专门从事翻译(例如,中文到英文)或摘要(缩短文章)。 比喻:这就像训练一头大象(大型语言模型)以高精度执行单一、特定的任务。 成为通才(提示):第二个期望是让大型语言模型成为一个多才多艺的“万事通”,能够做任何事情。 范例:给大型语言模型一个句子,然后提供一个人类可读的指令(“提示”),告诉它要翻译还是摘要该句子。 比喻:这就像一头知道很多事情的大象(大型语言模型),但需要一只小老鼠(人类用户)用简单的指令来指导它该做什么。ChatGPT就是这种方法的典型例子。 通才思想的历史背景将大型...
2.7k 词
为什么有些软件会用多种编程语言开发?你是否曾好奇,为什么一个软件项目有时会“混搭”使用多种编程语言?这背后其实蕴含着现代软件工程中关于性能、协作与代码复用的深刻智慧。本文将带你深入了解这背后的技术原理。 前端与后端:天然的“多语言”环境对于我们熟悉的网站和应用,例如使用Django这类全栈框架构建的项目,其本身就是多语言协作的典型。后端逻辑可能由Python处理,而用户直接交互的前端界面则由HTML、CSS和JavaScript构建。这两部分作为独立的进程,通过网络请求等方式进行通信,各自安好。 然而,当我们需要将不同语言编写的代码编译成一个单一、高效的可执行文件时,事情就变得复杂起来。这正是本次探讨的核心。 从源代码到可执行文件:编译的艺术要理解多语言如何“融合”,我们首先需要了解代码是如何从人类可读的文本,转变为机器可以执行的指令的。以经典的C语言为例,我们熟知的GCC编译器实际上经历了一个四步流程: 预处理 (Preprocessing): 处理宏定义、头文件等。 编译 (Compilation): 将预处理后的代码转换成汇编语言。这是一个关键的中间步骤,并非直接生成机...
1.7k 词
普遍规律分析炒股的朋友大概率都经历过这种场景:行情火得不行,身边人都在聊某只股票,抖音、朋友圈、财经博主全在喊多。你一咬牙进去了,结果刚买完,股价就掉头往下。最后只能尴尬地安慰自己一句:是不是我买的姿势不对? “当菜市场大妈都在讨论股票的时候,那这波行情就要见顶了”,这句话不是没有道理。 其实,这不是个例,而是普遍规律。为什么普通人总是买在顶点?今天想跟大家聊聊这个自我实现的陷阱。 先看点数据,2000 年科网股泡沫最疯狂的时候,美国散户开户量创历史新高,结果没过几个月,纳指腰斩。 2021 年美股、加密货币大火,Robinhood 下载量在一季度冲到顶峰,Coinbase 新用户数飙升。结果呢?比特币从 6 万跌到 3 万,美股科技股一顿暴杀。 再看现在:谷歌搜AI 股票,Nvidia的热度在 2025 年 6 月达到顶点,刚好对应 AI 概念股的一波短线见顶。 这背后,其实就是群体心理:越是价格涨到离谱的时候,越是吸引新玩家蜂拥而入。为什么?因为人性。 三大陷阱1. 从众效应:别人赚钱=我也要上车人在投资里最典型的心理,就是怕错过。当你发现身边朋友靠 Nvidia 或比特币赚...
8.5k 词
Python与Pytorch1. enumerate作用:在 遍历一个序列 时,额外提供 元素的索引。 语法: 12for i, x in enumerate(sequence, start=0): ... i 是索引(默认从 0 开始,可以用 start 改起始值); x 是序列里的元素。 例子: 123chars = ['a', 'b', 'c']for i, ch in enumerate(chars): print(i, ch) 输出: 1230 a1 b2 c 用途:常用于 建立索引表(比如你代码里的 stoi),或者当你需要同时知道 位置 和 值 时。 2. zip作用:把 多个可迭代对象(list/tuple/string等)里的元素 一一配对,返回元组。 语法: 12for x, y in zip(seq1, seq2): ... 第一个序列的第 k 个元素和第二个序列的第 k 个元素配成一对 (x, y)。 会在最短的序列结束时停下。 例子: 1234a = [1, 2, 3]b = ['x', 'y', 'z']fo...
9.2k 词
问题1:机器学习的基本分类有哪些?监督学习、无监督学习、半监督学习与强化学习有何区别。机器学习的基本分类主要有 监督学习、无监督学习、半监督学习和强化学习。它们的区别可以从 是否有标注数据、学习目标、训练方式 三个角度理解: 1. 监督学习(Supervised Learning)- **数据特点**:训练数据包含输入 $X$ 和对应的**输出标签 $Y$**。 - **目标**:学习一个映射函数 $f:X→Y$,使得预测值尽可能接近真实标签。 - **典型任务**:分类(如垃圾邮件识别)、回归(如房价预测)。 - **核心思想**:通过大量“输入-输出”示例来学习规律。 2. 无监督学习(Unsupervised Learning)- **数据特点**:只有输入数据 $X$,没有标签 $Y$。 - **目标**:发现数据内部的结构或模式。 - **典型任务**:聚类(如用户分群)、降维(如主成分分析 PCA)。 - **核心思想**:通过**数据自身的相似性或分布规律来理解结构**,而不依赖标签。 ...
7.7k 词
通过从零构建一个名为micrograd的微型自动求导引擎,来深入、直观地理解神经网络的训练核心——反向传播算法。 第一阶段:核心概念与导数直观理解 Micrograd 简介: 它是一个自动梯度(Autograd)引擎,其核心功能是实现反向传播(Backpropagation)。 反向传播是高效计算损失函数相对于神经网络所有权重和偏置的梯度(Derivatives)的算法。梯度指明了调整参数以减小损失的方向。 这是 PyTorch、JAX 等现代深度学习框架的数学核心。 核心演示: Value对象:micrograd中的基本数据单元,可以构建数学表达式图。 前向传播 (Forward Pass):从输入开始,通过计算图计算出最终的输出值。 反向传播 (Backward Pass):在最终输出上调用.backward(),micrograd会自动、递归地应用链式法则(Chain Rule),计算出最终输出对每一个输入和中间变量的梯度。 12345678910111213141516171819202122232425262728293031323334353...