1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        初學(xué)者怎么入門大語言模型(LLM)?

        共 7506字,需瀏覽 16分鐘

         ·

        2024-04-01 20:36

        真的想入門大語言模型,只看這一個(gè)文章應(yīng)該是可以入門的。但是修行下去,還是要靠自己的了!

        如果你把大語言模型/LLM 當(dāng)成一門技術(shù)來看,那就要看一下這門技術(shù)需要什么。

        基本要求:

        • 開發(fā)語言:Python, C/C++

        • 開發(fā)框架:Numpy/Pytorch/Tensorflow/Keras/Onnx

        • 數(shù)學(xué)知識(shí):線性代數(shù)、高數(shù)、概率、凸優(yōu)化

        這些東西我們假定你都已經(jīng)會(huì)了,或者熟練使用了。

        如果不熟,我建議你自己再學(xué)習(xí)一下。尤其是數(shù)學(xué)的幾個(gè)基本公式,是要學(xué)會(huì)的。我列一下吧。

        數(shù)學(xué)核心內(nèi)容

        1. 「線性代數(shù)」:關(guān)鍵概念包括向量、矩陣、特征值和特征向量。重要的公式涉及矩陣乘法、行列式以及特征值方程Av=λv,其中 A是矩陣,v 是特征向量,λ是特征值。

        2. 「高數(shù)」:基本主題是微分和積分,重點(diǎn)是理解極限、導(dǎo)數(shù)和積分的概念。函數(shù) f(x) 在點(diǎn) x的導(dǎo)數(shù)由f′(x)=limh→0 f(x+h)?f(x) 給出,基本微積分定理將微分與積分聯(lián)系起來。

        3. 「概率」:關(guān)鍵點(diǎn)包括概率公理、條件概率、貝葉斯定理、隨機(jī)變量和分布。例如,貝葉斯定理由P(A∣B)=P(B∣A)P(A)/P(B)給出,它幫助在發(fā)生B 的情況下更新 A 的概率。

        4. 「凸優(yōu)化」:關(guān)注目標(biāo)函數(shù)為凸函數(shù)的問題。關(guān)鍵概念包括凸集、凸函數(shù)、梯度下降和拉格朗日乘數(shù)。梯度下降更新規(guī)則可以表示為 xn+1 =xn ?α?f(xn ),其中 α是學(xué)習(xí)率。

        你可以看到這些相對(duì)經(jīng)常用到的數(shù)學(xué),其實(shí)沒有多難,只要你再看一下記住就好了。

        開發(fā)框架

        Numpy 主要是掌握各種數(shù)據(jù)的使用方法

        Pytorch 與 Tensor、 Keras 就是完成各種網(wǎng)絡(luò)及訓(xùn)練的方法

        你至少要能保證下面的代碼里的每一行代碼都能完全理解

        import torch
        from torch import nn, optim
        from torchvision import datasets, transforms
        from torch.utils.data import DataLoader
        # Define a transformation to normalize the data
        transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
        # Load the Fashion MNIST dataset
        train_dataset = datasets.FashionMNIST(root='./data', train=True, download=True, transform=transform)
        test_dataset = datasets.FashionMNIST(root='./data', train=False, download=True, transform=transform)
        train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
        test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
        # Define the neural network structure
        class FashionMNISTNN(nn.Module):
            def __init__(self):
                super(FashionMNISTNN, self).__init__()
                self.flatten = nn.Flatten()
                self.linear_relu_stack = nn.Sequential(
                    nn.Linear(28*28, 512),
                    nn.ReLU(),
                    nn.Linear(512, 256),
                    nn.ReLU(),
                    nn.Linear(256, 10),
                )
            def forward(self, x):
                x = self.flatten(x)
                logits = self.linear_relu_stack(x)
                return logits
        model = FashionMNISTNN()
        # Define the loss function and optimizer
        loss_fn = nn.CrossEntropyLoss()
        optimizer = optim.Adam(model.parameters(), lr=0.001)
        # Function to train the model
        def train(dataloader, model, loss_fn, optimizer):
            size = len(dataloader.dataset)
            model.train()
            for batch, (X, y) in enumerate(dataloader):
                # Compute prediction and loss
                pred = model(X)
                loss = loss_fn(pred, y)
                # Backpropagation
                optimizer.zero_grad()
                loss.backward()
                optimizer.step()
                if batch % 100 == 0:
                    loss, current = loss.item(), batch * len(X)
                    print(f"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]")
        # Function for testing the model
        def test(dataloader, model, loss_fn):
            size = len(dataloader.dataset)
            num_batches = len(dataloader)
            model.eval()
            test_loss, correct = 0, 0
            with torch.no_grad():
                for X, y in dataloader:
                    pred = model(X)
                    test_loss += loss_fn(pred, y).item()
                    correct += (pred.argmax(1) == y).type(torch.float).sum().item()
            test_loss /= num_batches
            correct /= size
            print(f"Test Error: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")
        # Train the model
        epochs = 5
        for t in range(epochs):
            print(f"Epoch {t+1}\n-------------------------------")
            train(train_loader, model, loss_fn, optimizer)
            test(test_loader, model, loss_fn)
        print("Done!")
        print("關(guān)注微信公眾號(hào):佑佑有話說")

        注意,是每一行代碼,都能完全理解!?。?/p>

        Transformer基礎(chǔ)

        做為 LLM 的基礎(chǔ)模型,你要想入門,那對(duì) Transformer 這個(gè)模型要了如指掌才成!

        而 Transformer 的基本圖像就是下面這樣的:

        推薦自己手寫一個(gè) Transformer 模型,至少要寫一個(gè) Attention 的結(jié)構(gòu)。還要看懂下面這個(gè)圖。你就能體會(huì)到一個(gè)至簡(jiǎn)的模型是怎么遵循 Scaling Law的,AGI 可能就在這個(gè)簡(jiǎn)單的重復(fù)與變大中了!

        但是Transformer 這么簡(jiǎn)單的東西怎么就這么厲害了呢?整個(gè)大模型已經(jīng)發(fā)展兩三年了,如果你再不跟上,可能很快就淘汰了。

        「只要你有想法,你就有結(jié)果!只要你投入,就會(huì)有成就!」

        這些是個(gè)基礎(chǔ)了。但是對(duì)于 LLM 來講吧,如果你想自己繼續(xù)研究,那可能要接觸的就是下面這些東西了。

        • Prompt 工程

        • RAG 技術(shù)

        • Fine-Tune 技術(shù)

        • LLM Training From Scratch

        • LLM 部署及優(yōu)化技術(shù)

        這幾項(xiàng)基本上是針對(duì)效果及成本的要求從低到高的順序,也是技術(shù)上從簡(jiǎn)單到難的順序列出來的。

        1. 「Prompt 工程」:涉及設(shè)計(jì)和完善給LLM的Prompt,來得到最準(zhǔn)確或最有用的Response。核心原則是通過精心設(shè)計(jì)的問題或陳述引導(dǎo)LLM生成所需的輸出。它需要理解LM的能力和限制,并且通常涉及反復(fù)試驗(yàn)以找到最有效的提示。基本技術(shù)就是三件事:
          指令角色、精確表達(dá)、要求輸出格式。

        2. 「RAG 技術(shù)(檢索增強(qiáng)生成)」:RAG 是一種方法,結(jié)合了檢索器模型來獲取相關(guān)文檔或數(shù)據(jù)和生成器模型來產(chǎn)生最終輸出。這種技術(shù)通過外部信息豐富LLM的響應(yīng),提高其準(zhǔn)確性和可靠性,特別是對(duì)于知識(shí)密集型任務(wù)。關(guān)鍵是有效整合檢索和生成過程,以利用現(xiàn)有知識(shí)和生成能力。
          你需要了解的就是 LangChain

        3. 「Fine-Tune 技術(shù)」:微調(diào)涉及在特定數(shù)據(jù)集或特定任務(wù)上輕微調(diào)整預(yù)訓(xùn)練模型參數(shù)以提高性能。這種方法允許利用大型預(yù)訓(xùn)練模型并將它們適應(yīng)于專門的要求,無需進(jìn)行大量重新訓(xùn)練。本質(zhì)是保持LM的一般能力,同時(shí)為特定用例進(jìn)行優(yōu)化。
          沒啥好說的了,自己準(zhǔn)備數(shù)據(jù)針對(duì)特定任務(wù)訓(xùn)練

        4. 「LLM 從零開始訓(xùn)練」:從頭開始訓(xùn)練大型語言模型(LLM)意味著在不依賴現(xiàn)有預(yù)訓(xùn)練權(quán)重的情況下構(gòu)建模型。這個(gè)過程涉及收集大量數(shù)據(jù)集、設(shè)計(jì)模型架構(gòu),然后在高性能計(jì)算資源上長(zhǎng)時(shí)間訓(xùn)練模型。核心挑戰(zhàn)是需要大量的計(jì)算能力和數(shù)據(jù),以及有效管理訓(xùn)練過程的專業(yè)知識(shí)。
          如果你沒有在一個(gè)頂級(jí)的公司或者研究團(tuán)隊(duì),想想就好了。

        5. 「LLM 部署及優(yōu)化技術(shù)」:部署和優(yōu)化LLM涉及有效提供預(yù)測(cè)的策略,同時(shí)有效管理計(jì)算資源。這包括模型量化(減少數(shù)字的精度以節(jié)省內(nèi)存)、模型修剪(移除不那么重要的權(quán)重)和蒸餾(訓(xùn)練一個(gè)較小的模型來模仿一個(gè)較大的模型)。目標(biāo)是減少模型的大小和推理時(shí)間,而不會(huì)顯著影響其性能,使其適合生產(chǎn)環(huán)境。

        入骨相思知不知


        玲瓏骰子安紅豆


        入我相思門,知我相思苦,長(zhǎng)相思兮長(zhǎng)相憶,短相思兮無窮極。

        瀏覽 46
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            古装一级裸体片在线观看 | 啪啪啪麻豆| 大尺度做爰呻吟舌吻女女漫画 | 国产日韩欧美操逼 | 两根硕大的挺进他身体里的动态图 | 欧美射精视频 | 丁香五月天亚洲 | 五月丁香花在线观看 | 国产精品99久久久久久宅女 | 麻豆国产人妻自制传媒 |