LLM架构从基础到精通之词向量2

深度学习之词向量 一、词向量 自上世纪90年代开始,特征空间模型就应用于分布式语言理解中,在当时许多模型用连续性的表征来表示词语,包括潜在语义分析LSA、隐含狄利克雷分布LDA主题模型。Bengio et al.在2003年首先提出了词向量的概念,当时是将其与语言模型的参数一并训练得到的。Collobert和Weston则第一次正式使用预训练的词向量,不仅将词向量方法作为处理下游任务的有效工具,还引入了神经网络模... 阅读详情

自然语言处理中的词嵌入技术全解析

在自然语言处理的奇妙世界里,词嵌入技术是一座关键的桥梁,连接着文本与机器可理解的语义表达。此前我们探讨了词嵌入的基础概念,现在让我们深入到具体的技术细节中,从 3.1.4 N-Grams 开始,一步步揭开这些技术的神秘面纱。

3.1.4 N-Grams

N-grams 是在文本分析中可作为一个单元共同使用的单词序列。像 “Mary had a little lamb” 这句话中,“Mary had”、“had a”、“a little” 和 “little lamb” 等都是二元组(N = 2)。然而,许多 N-grams 在数据中可能出现频率过低,导致其表示稀疏且意义有限。

它主要有以下几种类型:

  • Unigram:即单个单词。
  • Bigram:由两个单词组成的对。
  • Trigram:三个单词构成的序列。

其重要性在于能够捕捉文本中的上下文和单词之间的依赖关系。

以下是一段 Python 示例代码,展示如何生成和分析 N-grams:

import nltk
from nltk.util import ngrams
from collections import Counter

text = "The quick brown fox jumps over the lazy dog"
tokens = nltk.word_tokenize(text)
unigrams = list(ngrams(tokens, 1))
print("Unigrams:")
print(unigrams)
bigrams = list(ngrams(tokens, 2))
print("\nBigrams:")
print(bigrams)
trigrams = list(ngrams(tokens, 3))
print("\nTrigrams:")
print(trigrams)

unigram_freq = Counter(unigrams)
bigram_freq = Counter(bigrams)
trigram_freq = Counter(trigrams)

print("\nUnigram Frequencies:")
print(unigram_freq)
print("\nBigram Frequencies:")
print(bigram_freq)
print("\nTrigram Frequencies:")
print(trigram_freq)

输出结果如下:

Unigrams:
[('The',), ('quick',), ('brown',), ('fox',), ('jumps',), ('over',), ('the',), ('lazy',), ('dog',)]
Bigrams:
[('The', 'quick'), ('quick', 'brown'), ('brown', 'fox'), ('fox', 'jumps'), ('jumps', 'over'), ('over', 'the'), ('the', 'lazy'), ('lazy', 'dog')]
Trigrams:
[('The', 'quick', 'brown'), ('quick', 'brown', 'fox'), ('brown', 'fox', 'jumps'), ('fox', 'jumps', 'over'), ('jumps', 'over', 'the'), ('over', 'the', 'lazy'), ('the', 'lazy', 'dog')]
Unigram Frequencies:
Counter({('The',): 1, ('quick',): 1, ('brown',): 1, ('fox',): 1, ('jumps',): 1, ('over',): 1, ('the',): 1, ('lazy',): 1, ('dog',): 1})
Bigram Frequencies:
Counter({('The', 'quick'): 1, ('quick', 'brown'): 1, ('brown', 'fox'): 1, ('fox', 'jumps'): 1, ('jumps', 'over'): 1, ('over', 'the'): 1, ('the', 'lazy'): 1, ('lazy', 'dog'): 1})
Trigram Frequencies:
Counter({('The', 'quick', 'brown'): 1, ('quick', 'brown', 'fox'): 1, ('brown', 'fox', 'jumps'): 1, ('fox', 'jumps', 'over'): 1, ('jumps', 'over', 'the'): 1, ('over', 'the', 'lazy'): 1, ('the', 'lazy', 'dog'): 1})

尽管 N-grams 有一定的作用,但也存在一些局限性:

  • 高维度和稀疏性:会产生大量的 N-grams 组合,导致向量空间维度极高且非常稀疏,增加了计算和存储的负担。
  • 缺乏语义理解:仅仅基于单词的连续组合,难以深入理解单词之间的语义关系。
  • 忽略上下文:不能很好地捕捉长距离的上下文信息,对文本的整体语义把握有限。
  • 可扩展性问题:随着文本数据量的增加,N-grams 的数量会迅速增长,使得处理变得困难。
  • 对噪声和罕见词敏感:容易受到数据中的噪声影响,并且在处理罕见词时效果不佳。
  • 难以捕捉多义词和同义词:不能有效区分具有相同或相似含义的单词,以及一个单词的不同含义。
  • 无法跨语言通用:在不同语言中,N-grams 的组合和语义关系差异较大,难以直接应用。
  • 难以捕捉长时依赖:对于文本中较长距离的单词依赖关系,N-grams 难以有效捕捉。

3.1.5 共现矩阵(Co-occurrence Matrices)

共现矩阵用于捕捉在给定的上下文窗口中单词共同出现的频率。它量化了单词之间的统计关系,为生成词嵌入提供了基础。

例如,假设有一个包含以下三个文档的语料库:

  • 文档 1:“The quick brown fox jumps over the lazy dog.”
  • 文档 2:“The brown dog barks loudly.”
  • 文档 3:“The lazy cat sleeps peacefully.”

我们想基于这些文档构建一个窗口大小为 1 的共现矩阵,这意味着我们考虑每个单词与其紧邻单词的共现情况,同时忽略标点并以不区分大小写的方式处理单词。

首先,根据语料库中的唯一单词构建词汇表:
Vocabulary: [the, quick, brown, fox, jumps, over, lazy, dog, barks, loudly, cat, sleeps, peacefully]

然后创建共现矩阵,其中行和列代表词汇表中的单词。矩阵中每个单元格 (i, j) 的值表示单词 i 在指定窗口大小内与单词 j 共现的次数。

the  quick  brown  fox  jumps  over  lazy  dog  barks  loudly  cat  sleeps peacefully
the         0      1      1    0      0     0     1    1      0       0     1       1         1
quick       1      0      0    1      0     0     0    0      0       0     0       0         0
brown       1      0      0    0      0     0     0    1      1       0     0       0         0
fox         0      1      0    0      1     0     0    0      0       0     0       0         0
jumps       0      0      0    1      0     1     0    0      0       0     0       0         0
over        0      0      0    0      1     0     1    0      0       0     0       0         0
lazy        1      0      0    0      0     1     0    1      0       0     1       0         0
dog         1      0      1    0      0     0     1    0      1       1     0       0         0
barks       0      0      1    0      0     0     0    1      0       1     0       0         0
loudly      0      0      0    0      0     0     0    1      1       0     0       0         0
cat         1      0      0    0      0     0     1    0      0       0     0       1         1
sleeps      1      0      0    0      0     0     0    0      0       0     1       0         1
peacefully  1      0      0    0      0     0     0    0      0       0     1       1         0

这个共现矩阵捕捉了在窗口大小为 1 的情况下每个单词与其他单词的共现频率。例如,“the” 行和 “lazy” 列的条目值为 1,表示在整个语料库中,“lazy” 与 “the” 在指定窗口内共现了一次。

在自然语言处理中,共现矩阵的一个主要应用是生成词嵌入。通过分析语料库中单词的共现模式,共现矩阵可以捕捉每个单词周围的上下文信息。像 Word2Vec 和 GloVe 等技术利用这些矩阵创建密集、低维的单词向量表示,其中向量之间的几何关系反映了单词之间的语义相似性,从而实现单词相似性的测量、类比检测和语义搜索等任务。

以下是一段 Python 示例代码,展示如何构建和处理共现矩阵:

import numpy as np
import pandas as pd
from collections import Counter
from sklearn.preprocessing import normalize

corpus = [
    "I love machine learning",
    "machine learning is great",
    "I love deep learning",
    "deep learning and machine learning are related"
]
corpus = [sentence.lower().split() for sentence in corpus]
vocab = set([word for sentence in corpus for word in sentence])
vocab = sorted(vocab)
vocab_size = len(vocab)
co_occurrence_matrix = np.zeros((vocab_size, vocab_size))
window_size = 2
word2idx = {word: i for i, word in enumerate(vocab)}

for sentence in corpus:
    for i, word in enumerate(sentence):
        word_idx = word2idx[word]
        start = max(0, i - window_size)
        end = min(len(sentence), i + window_size + 1)
        for j in range(start, end):
            if i!= j:
                context_word = sentence[j]
                context_idx = word2idx[context_word]
                co_occurrence_matrix[word_idx, context_idx] += 1

co_occurrence_df = pd.DataFrame(co_occurrence_matrix, index=vocab, columns=vocab)
co_occurrence_normalized = normalize(co_occurrence_matrix, norm='l1', axis=1)
co_occurrence_normalized_df = pd.DataFrame(co_occurrence_normalized, index=vocab, columns=vocab)

print("Co-occurrence Matrix:")
print(co_occurrence_df)
print("\nNormalized Co-occurrence Matrix:")
print(co_occurrence_normalized_df)

然而,共现矩阵也存在一些局限性:

  • 高维度导致效率和存储问题:随着词汇量的增加,矩阵的维度会迅速增长,导致计算效率低下和存储需求巨大。
  • 极度稀疏:由于大多数单词对很少共现,矩阵中大部分元素为 0,造成了数据的稀疏性。
  • 捕捉深层语义关系的能力有限:虽然能反映共现频率,但难以深入挖掘单词之间的深层次语义联系。
  • 上下文独立性:不能区分同一个单词在不同上下文中的不同含义。
  • 对大型语料库的可扩展性挑战:矩阵大小随词汇量呈二次增长,在处理大规模语料库时面临巨大挑战。
  • 对频繁词的偏向:频繁出现的单词在矩阵中的权重较大,对罕见词或短语的表示不可靠。
  • 表达能力有限:无法捕捉复杂的语言结构和语义关系。
  • 噪声数据:由于存在停用词和无意义的单词对,会引入噪声数据。

3.1.6 独热编码(One-Hot Encoding)

独热编码是自然语言处理中表示单词的一种基本方法。词汇表中的每个单词都被表示为一个独特的向量,除了对应单词索引位置的元素为 1 外,其他所有元素都设置为 0。

例如,假设有一个包含 10,000 个单词的词汇表,对于单词 “aardvark”,其向量表示为 [1, 0, 0, 0, …, 0],即在第一个位置为 1,后面跟着 9,999 个 0;对于单词 “ant”,其向量表示为 [0, 1, 0, 0, …, 0],即在第二个位置为 1,其余位置为 0,以此类推。这个过程就称为独热向量编码,它也常用于多类分类问题中表示标签。

假设我们正在构建一个自然语言处理项目中的翻译模型,需要将英文句子 “the cat is black” 翻译成另一种语言。首先要对每个单词进行独热编码。查找第一个单词 “the” 在 10,000 长的词汇表中的索引,假设其索引为 8676,那么 “the” 就可以用一个长度为 10,000 的向量表示,其中除了第 8676 个位置为 1 外,其他位置均为 0。对输入句子中的每个单词都进行这样的索引查找,并创建向量来表示每个输入单词。

以下是一段 Python 示例代码,展示如何实现独热编码:

def one_hot_encode(text):
    words = text.split()
    vocabulary = set(words)
    word_to_index = {word: i for i, word in enumerate(vocabulary)}
    one_hot_encoded = []
    for word in words:
        one_hot_vector = [0] * len(vocabulary)
        one_hot_vector[word_to_index[word]] = 1
        one_hot_encoded.append(one_hot_vector)
    return one_hot_encoded, word_to_index, vocabulary

example_text = "cat in the hat dog on the mat bird in the tree"
one_hot_encoded, word_to_index, vocabulary = one_hot_encode(example_text)
print("Vocabulary:", vocabulary)
print("Word to Index Mapping:", word_to_index)
print("One-Hot Encoded Matrix:")
for word, encoding in zip(example_text.split(), one_hot_encoded):
    print(f"{word}: {encoding}")

输出结果如下:

Vocabulary: {'mat', 'the', 'bird', 'hat', 'on', 'in', 'cat', 'tree', 'dog'}
Word to Index Mapping: {'mat': 0, 'the': 1, 'bird': 2, 'hat': 3, 'on': 4, 'in': 5, 'cat': 6, 'tree': 7, 'dog': 8}
One-Hot Encoded Matrix:
cat: [0, 0, 0, 0, 0, 0, 1, 0, 0]
in: [0, 0, 0, 0, 0, 1, 0, 0, 0]
the: [0, 1, 0, 0, 0, 0, 0, 0, 0]
hat: [0, 0, 0, 1, 0, 0, 0, 0, 0]
dog: [0, 0, 0, 0, 0, 0, 0, 0, 1]
on: [0, 0, 0, 0, 1, 0, 0, 0, 0]
the: [0, 1, 0, 0, 0, 0, 0, 0, 0]
mat: [1, 0, 0, 0, 0, 0, 0, 0, 0]
bird: [0, 0, 1, 0, 0, 0, 0, 0, 0]
in: [0, 0, 0, 0, 0, 1, 0, 0, 0]
the: [0, 1, 0, 0, 0, 0, 0, 0, 0]
tree: [0, 0, 0, 0, 0, 0, 0, 1, 0]

虽然独热编码能够将单词表示为实数值向量,但也存在一些问题:

  • 缺乏语义相似性:无法捕捉单词之间的语义关系。例如,“cat” 和 “tiger” 被表示为完全不同的向量,没有体现出它们的相似性,这对于基于类比的向量操作等任务来说是个很大的问题。
  • 高维度:独热向量的维度与词汇表大小呈线性增长。随着词汇量的增加,特征向量会变得非常大,加剧了维度灾难。这不仅增加了需要估计的参数数量,还需要指数级更多的数据来训练一个泛化良好的模型。
  • 计算效率低下:独热编码向量是稀疏且高维的,大部分元素为 0。许多机器学习模型,尤其是神经网络,在处理这种稀疏数据时会遇到困难。庞大的特征空间也会导致内存和存储方面的挑战,特别是当模型不能有效地处理稀疏矩阵时。

后续我们将继续探讨如何解决这些问题,以及其他更先进的词嵌入技术,敬请期待!

希望这篇文章能帮助到大家。

自然语言处理5 -- 词向量 1 概述 词向量和分词一样,也是自然语言处理中的基础性工作。词向量一方面解决了词语的编码问题,另一方面也解决了词的同义关系,使得基于LSTM等深度学习模型的自然语言处理成为了可能。和分词不同,中英文文本,均需要进行词向量编码。 2 词向量工具 2013年Google开源了word2vec工具,它可以进行词向量训练,加载已有模型进行增量训练,求两个词向量相似度,求与某个词接近的词语,等等。... 阅读详情

相关推荐

实测OV5640 DVP/MIPI接口720p@60fps配置,为什么我的Zynq-7020开发板只有30帧?

本文深入解析了OV5640摄像头在Zynq-7020开发板上帧率减半的问题,从寄存器配置到硬件链路进行全面排查。重点分析了DVP/MIPI接口的720p@60fps配置,提供了关键寄存器设置、时序参数调整及硬件带宽验证方法,帮助开发者快速定位并解决帧率下降问题。

weixin_42634811的博客 344

词向量相关总结

最近准备把词向量相关知识串一下,会持续更 主要参考:https://zhuanlan.zhihu.com/p/95304317 unigram模型:所有的词都是相互独立的 P(w1,w2,...,wn)=∏i=1nP(wi)P(w_1,w_2,...,w_n)= \prod_{i=1}^n P(w_i)P(w1​,w2​,...,wn​)=i=1∏n​P(wi​) bigram模型:每一个词...

Suan2014的博客 653

东华大学2020考研计算机OJ题目解答分享——进阶篇(4)

4 一个月的天数 作者: Turbo时间限制: 1S章节: 分支结构 问题描述 : 输入年和月,输出该月有几天。 输入说明 : 输入两个整数,中间以空格分隔,第一个整数表示年,第二个整数表示月。 输出说明 : 输出该年该月的天数,输出时,行首与行尾均无空格,仅输出一个整数。 输入范例 : 2000 2 输出范例 : 29 解答思路: 闰年和质数出题一样频繁,简单必会 AC代码 #include...

qq_38344326的博客 472

大语言模型(LLM)入门笔记:嵌入向量与位置信息

你可以把嵌入向量理解成文字的"数字翻译器"。计算机看不懂"猫""狗"这些文字,只能处理数字,嵌入向量就负责把文字转换成一串数字(比如),同时还保留了文字的意思。位置信息就是给句子中的每个词打上"位置标签",告诉模型这个词在句子中排第几。对比项嵌入向量位置信息核心功能表示"词的意思"表示"词的顺序"比喻文字的"数字指纹"队伍的"编号牌"模型依赖所有LLM都必须有基于Transformer的LLM必须有常见问题一词多义处理长文本位置信息衰减。

weixin_70530563的博客 1303

深入解析:如何基于开源p-net快速开发Profinet从站服务

开源p-net协议栈为工业设备开发者打开了通往Profinet世界的大门。随着工业互联网的发展,软协议栈方案将在边缘计算领域展现更大潜力。该文章完整实现了PROFINET从站的核心功能,可直接作为产品开发的基础框架。实际部署时需根据具体硬件平台调整网络驱动和实时性配置。

极地星辰 3882

单细胞转录组数据质控实战:如何用Seurat精准过滤低质量细胞(附完整代码)

本文详细介绍了使用Seurat进行单细胞转录组数据质控的实战方法,包括基因检出数、分子计数和线粒体基因比例等关键指标的解读与可视化技巧。通过动态阈值策略和高级质控技巧(如双细胞检测和红细胞过滤),帮助研究者精准过滤低质量细胞,提升数据分析可靠性。附完整代码示例,适合生物信息学研究人员参考实践。

ii567的博客 825

BERT简述

本文从词嵌入出发,一步步介绍Bert出现的背景,故文章前一部分的介绍可能与Bert的相关性不强,但是必不可少。 1、词向量        词向量一直是领先的NLP模型处理语言的主要能力。Word2Vec、Glove等方法已广泛应用于此类任务。让我们先回顾一下如何使用它们。         对于要由机器学习模型处理的单词,它们需要以某种数字形式表示,以便模型可以在其计算中使用。Word2Vec...

m0_37565948的博客 2870

告别玄学调参:手把手教你用LSTM-AutoEncoder为传感器数据做异常检测(实战篇)

本文详细介绍了LSTM-AutoEncoder在传感器数据异常检测中的工程化实践,包括数据预处理、模型架构设计和生产环境部署策略。通过结合LSTM的时间序列处理能力和AutoEncoder的特征提取优势,该方法能够有效识别温湿度、PM2.5等传感器数据的异常模式,适用于工业物联网和室内空气质量监测等场景。

weixin_29212429的博客 477

LLM架构从基础到精通之词向量1

上下文窗口的大小会影响嵌入的质量。它本质上是一种将单词转换为连续向量空间中的数值表示(即向量)的方法,旨在捕捉单词的语义信息,使得语义相似的单词具有相似的向量表示。例如,著名的类比:(v_{queen} \approx v_{king} - v_{man} + v_{woman}),这个操作展示了如何通过调整“king”的向量与“man”和“woman”的差异来得到“queen”的向量。在这些模型中,单词的嵌入根据其出现的上下文而变化,使得模型能够捕捉像“bank”(如河岸与银行)这样的单词的不同含义。

柏企阅文 1206

FIFO的工作原理及其设计

FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个口是存储器的输入口,另一个口是存储器的输出口。对于单片FIFO来说,主要有两种结构:触发导向结构和零导向传输结构。触发导向传输结构的FIFO是由寄存器阵列构成的,零导向传输结构的FIFO是由具有读和写地址指针的双口RAM构成。FIFO与普通RAM存储器的是没有外部读写地址线(指针),使用方便,但。

Jackiezhang1993的博客 2万+

MIKE21 教程 3.2 随空间变化的网格文件制作(.dfsu文件制作) 曼宁值网格文件制作

上一节讲解了如何制作时间序列文件。本节讲解如何制作仅随空间变化的文件。 目录 1 数据准备 1.1 基于地形设置 1.2 基于地形水深设置: 2 数据导入 3 数据导出

Hello Word 3941

LLM架构从基础到精通之词向量3

因为在训练过程中,如果模型已经学习了“cat”的处理方式,那么当遇到“liger”时,如果它的嵌入与“cat”相似,模型就可以借鉴处理“cat”的路径,而不是从头开始学习。这就好比在一个庞大的图书馆中,我们不再为每个单词单独建立一个巨大的书架(独热编码),而是将相关的单词整理到几个紧凑的书架上(词嵌入),既节省了空间,又能快速找到所需的信息。例如,对于窗口大小为 3 的情况,我们只考虑句子中的三个单词,中间的单词是要预测的目标单词,周围的两个单词作为上下文输入到神经网络中。然后滑动窗口,重复这个过程。

柏企阅文 678

Qt代码-软件商店

ui->statusBar->showMessage(QString("%1 已卸载").arg(app["name"].toString()));ui->statusBar->showMessage(QString("开始下载 %1...").arg(app["name"].toString()));QString("%1 已下载完成,是否立即安装?ui->statusBar->showMessage(QString("%1 下载完成").arg(app["name"].toString()));

寒寒豆豆软件公司的博客 111

2W8000字 LLM架构文章阅读指北

详细给出在Python中构建LSTM的步骤,包括导入库和自定义类,如WeightInitializer、PlotManager和EarlyStopping,以及LSTM类的初始化、前向传播、反向传播、参数更新方法,还有训练器类LSTMTrainer的使用示例,并强调训练中参数设置和监控的重要性。神经网络类型多样,如浅层、深层神经网络等。选择模型时,不能仅依赖提示工程,要根据是否有标准答案、是否需自动化评估、有无时间限制等因素,选择合适的评估策略,如准确率、相似性指标、大语言模型评判器或人工评估等。

柏企阅文 1265

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LLM架构从基础到精通之 Word2Vec 训练全解析

在计算过程中,当我们将一个 1×10,000 的 one - hot 向量与一个 10,000×300 的矩阵相乘时,实际上就会选择出对应于‘1’位置的矩阵行,这一行就是输入单词的“词向量”。尽管它的网络只有两层,比较浅,但非常宽,因此它的每个训练过程都提供了独特的降低计算量的方法。从输入输出来看,网络的输入是表示输入单词的 one - hot 向量,标签也是表示目标单词的 one - hot 向量,但网络的输出是目标单词的概率分布,并非像标签那样一定是 one - hot 向量。

柏企阅文 617

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【LLM】万字通俗讲解大语言模型内部运行原理,非常详细零基础入门到精通,收藏这一篇就够了

来源:人工智能大讲堂下文翻译自Timothy B Lee和Sean Trott花费两个月完成的一篇博客。语言大模型内部究竟是如何工作的?本文用最少的数学知识和术语进行解释。如今,几乎每个人都听说过LLM,并有数千万人用过它们,但是,了解工作原理的人并不多。你可能听说过,训练LLM是用于“预测下一个词”,而且它们需要大量的文本来实现这一点。但是,解释通常就止步于此。它们如何预测下一个词的细节往往被视为一个深奥的谜题。其中一个原因是,这些系统的开发方式与众不同。

Javachichi的博客 2352

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NLP+LLM从入门到精通系列

前言:笔者从事于NLP+LLM的对话智能机器人的相关行业,现在的大模型的技术日新月异,传统的NLP业务显然是要被淘汰的,那么这也是我着笔写这一系列文章的初衷。本系列将由浅到深,结合实际代码案例,帮助想要入门的小伙伴们更快掌握,以下是本系列的文章结构与预告,希望小伙伴们可以留下一个点赞和关注,你们的关注便是我更新的动力.(本系列相关知识/提子获取/openai账户/我的私有训练语料库以及数据集等等

weixin_62115482的博客 1156

大白话!解析大模型原理!(非常详细)零基础入门到精通,收藏这一篇就够了

LLM的工作原理对大多数人来说是个谜。虽然,并需要大量文本进行训练,但具体细节往往令人困惑。原因在于这些系统独特的开发方式:**基于数十亿词汇训练的神经网络,不同于传统的人类编写的软件。**尽管没人完全理解其内部机制,但研究人员正努力探索。本文旨在以非技术、非数学的方式解释LLM的工作原理,包括词向量、Transformer模型及其训练方式,以及为何需要海量数据来取得良好性能。

Python_0011的博客 1577

【大模型 LLM】入门学习路线

大语言模型的学习需要理论与实践并重,从基础数学到复杂架构,从代码实现到系统部署,每个环节都需要脚踏实地。建议学习者采用 "小步快跑" 策略:先完成简单的文本分类项目,再逐步挑战生成任务和 RAG 系统,最终实现从技术应用到创新研究的跨越。随着 LLM 在各行业的深度落地,掌握这一技术将成为 AI 领域的核心竞争力。现在就打开 Colab,运行第一行 LLM 代码,开启你的技术探索之旅吧!

shuizhudan223的博客 1057

收藏!大语言模型(LLM)从入门到精通:程序员必看的技术详解

大语言模型本质上是“用海量数据训练出来的语言专家”,它的核心是通过Transformer理解文字关系,经过预训练和微调后,能在各种场景帮人干活。虽然听起来复杂,但对普通人来说,不用懂原理,会用它提高效率(写东西、查信息)就够了~ 随着技术发展,它会变得越来越“聪明”,像手机一样成为日常工具。

weixin_72959097的博客 812

【AIGC】大语言模型(LLM)系统化学习路线:从基础到前沿技术全景指南

(文末有礼物哦)"人工智能不会取代人类,但会用AI的人将取代不会用AI的人" —— 这一规律在LLM时代尤为显著。通过系统化学习路线,您将逐步掌握这一变革性技术的核心能力,为个人职业发展和企业智能化转型创造持续价值。

一起探索IT的世界 1016

大模型小白入门指南:收藏这份LLM学习资料,轻松掌握AI新技能!

LLM,全称 Large Language Model,也就是大语言模型。简单来说,大语言模型是一种通过大量文本数据训练出来的人工智能模型,它能够理解人类语言,并根据上下文生成新的内容。在训练过程中,模型会学习大量数据,包括:书籍、网页、代码、文档。理解用户问题组织自然语言生成文章内容编写代码总结和分析信息所以,大语言模型并不是提前存储了所有答案,而是通过学习大量文本中的规律,根据输入内容预测并生成新的结果。

qq_46094651的博客 267

SGLang Diffusion Cookbook 模型页作者契约:从标签组件到命令构建器的写作规范详解

本文是 SGLang 仓库中 Diffusion Cookbook 模型页写作契约(`.claude/skills/cookbook-add-model/references/diffusion-authoring.md`)的完整解读,面向为 SGLang Diffusion 新增图像/视频模型部署文档的开发者与文档维护者。你将掌握模型页的固定页面结构、标签组件用法、三阶段作用域(base/ser

gitblog_00812的博客 958

AIGC大语言模型系统化学习路线:从基础到前沿技术,全景指南助你成为LLM专家!

大型语言模型(LLM)已成为人工智能领域的核心技术,掌握其理论体系与实践方法对于开发者、研究人员和技术决策者至关重要。本文将基于最新行业实践和学术研究成果,构建一套从零基础到精通的完整学习路径,涵盖数学基础、编程技能、模型架构、训练优化、应用开发等关键环节,帮助您系统性地掌握LLM核心技术栈。

m0_63171455的博客 994

大模型LLM实现原理解读之嵌入模型(二)大模型入门到精通,收藏这篇就足够了!

初始化向量本质是创建一个词表数×嵌入维度的矩阵,还有相应词表数×嵌入维度的位置向量,然后初始化向量+位置向量作为嵌入层输入给Transformer。

huang9604的博客 1108
上一篇: LLM架构从基础到精通之词向量1
下一篇: LLM架构从基础到精通之词向量3
柏企
博客等级 码龄9年 4271粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏企

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值