2025從零構(gòu)建大模型的算法、訓(xùn)練與微調(diào)_第1頁
2025從零構(gòu)建大模型的算法、訓(xùn)練與微調(diào)_第2頁
2025從零構(gòu)建大模型的算法、訓(xùn)練與微調(diào)_第3頁
2025從零構(gòu)建大模型的算法、訓(xùn)練與微調(diào)_第4頁
2025從零構(gòu)建大模型的算法、訓(xùn)練與微調(diào)_第5頁
已閱讀5頁,還剩386頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

目錄TOC\o"1-2"\h\u20139 415999 4175111. 469662. 4253763.Transformer 4216494.預(yù)訓(xùn)練模型的興起:BERT、GPT和 5230745. 523410 66171. 610755 6179582. 61628001 7554002 8218703 82358504 8312773. 815505GPT 8110041.GreedySearch:只挑選當下看起來“最好的水果 22239162.BeamSearch:保留多個可能的選擇,選出一組“最搭配的水果組合 23127271. 3810112. 39107753. 396564. 39297381. 13233542.每一層輸出都是上一層的“總結(jié) 13111713. 131588201 2432419Tuning和P-Tuning 243424 719841 2072431 2011608 6166571.DataParallel 18226482.ModelParallel 1925859 61019101 101742202 101013503 102499102 13750303 13968304定義對比損失函數(shù)(NT-XentLoss) 141196405 152792006 1596211.GAN 28259762.GAN 28239853.GAN 2812495 346599 81403701 20690402 201308603 203115004 21893701 2929350 3468001. 34125752. 3519173. 35101014. 36191475. 3720922 71485201 112306005 121601306 13533601 142093405 151504101 171713303 181478205 182386906 1931002 323069202 325143 36172701 3626160 7148591. 8242252. 9277423. 9319664. 1022950 12976601 161204505 1717497 201712201 202475003 203200405 231664706 233157901 251267 107013 1126517 116369 1113845 1113087 1117988 125500 1222415 1525874 1522659 179389 187530 1826997 2114531 2128151 2527824 615989 7大模型(LargeModels)是基于深度學(xué)習(xí)的超大規(guī)模神經(jīng)網(wǎng)絡(luò),擁有數(shù)十億甚至數(shù)千億參20世紀90年代,統(tǒng)計學(xué)習(xí)方法興起,如HiddenMarkovModel(HMM)ConditionalRandomField(CRF),標志著人工智能開始從經(jīng)驗規(guī)則走向數(shù)據(jù)驅(qū)動的范絡(luò)(RecurrentNeuralNetwork,RNN)通過循環(huán)結(jié)構(gòu)對序列數(shù)據(jù)進行建模,解決了傳統(tǒng)統(tǒng)計學(xué)習(xí)難以捕捉長序列依賴的問題。隨后,長短時記憶(LongShort-TermMemory,LSTM)和門控循環(huán)單元(GatedRecurrentUnit,GRU)等變種通過引入門控機制,緩解列數(shù)據(jù),導(dǎo)致訓(xùn)練效率較低。雖然,卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,Transformer2017年,Google在論文AttentionIsAllYouNeed中提出了Transformer模型,以全新的自注Transformer的核心在于縮放點積注意力(ScaledDot-ProductAttention),它通過計算預(yù)訓(xùn)練模型的興起:BERT、GPT和BERT(BidirectionalEncoderRepresentationsfromTransformers):BERT采用雙向編碼器架構(gòu),通過掩碼語言模型(MaskedLanguageModel,MLM)和下一句預(yù)測(NextSentencePrediction,NSP)任務(wù)進行預(yù)訓(xùn)練,能夠捕獲句內(nèi)和句間的深層語義信GPT(GenerativePre-trainedTransformer):GPT采用單向解碼器架構(gòu),通過自回歸T5(Text-to-TextTransferTransformer):T5統(tǒng)一了文本任務(wù)的輸入和輸出格式,將CUDA和TensorCore的顯卡(如RTX30系列、A100)可以顯著提升深度學(xué)習(xí)計算效率;AMDRyzen5000系列或IntelCorei9操作系統(tǒng):推薦使用Linux系統(tǒng)(如Ubuntu20.04LTS),以確保良好的兼容性和高效的并Windows用戶可通過WindowsSubsystemforLinux(WSL)使用Linux子系統(tǒng),結(jié)合GPU加速Python環(huán)境:安裝最新的穩(wěn)定版本(如Python3.10),推薦使用虛擬環(huán)境工具(如wget/archive/Anaconda3-2023.11-Linux-x86_64.shbashAnaconda3-2023.11-Linux-x86_64.shpipinstalltorchtorchvisiontorchaudio--index-urlpipinstallDatasets:HuggingFacepipinstallJupyterNotebookpipinstallpipinstallcondacreate-nlarge_model_envpython=3.10-ycondaactivatelarge_model_envpipinstalltorchtorchvisiontorchaudio--index-urlpipinstalltransformersdatasetsscikit-learnpandasnumpyimportfromtransformersimportAutoModel,AutoTokenizerprint("CUDAavailable:",torch.cuda.is_available())tokenizer=AutoTokenizer.from_pretrained("bert-base-uncased")model=AutoModel.from_pretrained("bert-base-uncased")print("Modelloadedsuccessfully.")nvcc--數(shù)據(jù)集下載緩慢:通過設(shè)置國內(nèi)鏡像源加速HuggingFace第第1Transformer首先,介紹q2q模型中的編碼器—解碼器工作原理及其實現(xiàn)方法,深入解析文本數(shù)據(jù)闡述矩陣生成、點積運算等關(guān)鍵步驟,以及多頭注意力在序列任務(wù)中的重要作用。理解和應(yīng)用no模型奠定堅實的技術(shù)基礎(chǔ)。Seq2Seq編碼器—圖1-1Transformer編碼器—Seq2Seq圖1-2Seq2SeqEpoch:1,TrainLoss:Epoch:2,TrainLoss:Epoch:3,TrainLoss:Epoch:4,TrainLoss:Epoch:5,TrainLoss:教師強制(TeacherForcing):為提高訓(xùn)練效率,解碼器可在訓(xùn)練時選擇使用真實向量,從而保留語義信息,供模型處理。常見的分詞器有CasualTokenizer(因果分詞器)、Casual3DCNN分詞器等。因果分詞器架構(gòu)如圖1-3圖1-3PyTorch實現(xiàn)嵌入層(將分詞后的結(jié)果輸入模型嵌入層是將分詞后的詞匯索引轉(zhuǎn)換為模型可用的稠密向量表示的關(guān)鍵部分。通過yoh的nn.bddng模塊,可以將離散的詞匯索引映射到低維連續(xù)空間,每個詞語的嵌入向量縮后再通過嵌入層進行詞嵌入,如圖14所示。嵌入層的輸入是分詞器生成的詞匯索引序列,輸出為詞匯索引對應(yīng)的稠密向量矩陣。圖1-4分詞后的索引序列:展示分詞器將輸入文本“thequickbrownfox”嵌入向量:嵌入層將索引序列轉(zhuǎn)換為稠密向量,每個詞對應(yīng)一個8自注意力機制計算過程(QKV矩陣生成和點積運算圖1-5Transformer多頭注意力機制與()、鍵()和值()矩陣,然后將這些矩陣分割成多個頭(子空間),每個頭執(zhí)出并通過線性變換得到最終輸出。圖1-6會過度影響梯度傳播。殘差學(xué)習(xí)結(jié)構(gòu)如圖1-7所示,權(quán)重層(weightlayer)會經(jīng)過兩次relu圖1-7k:搭建一個簡單的網(wǎng)絡(luò)模型,包含多個殘差塊。在模型結(jié)構(gòu)中,前幾層均池化和全連接層實現(xiàn)分類。網(wǎng)絡(luò)輸出tensor([0.1210,0.3456,...,訓(xùn)練損失layer2.conv1.weight:tensor([...],grad_fn=)layer2.bn1.weight:tensor([...],grad_fn=)pyood:構(gòu)建一個簡單的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),包含3個層歸一化模塊。性。網(wǎng)絡(luò)輸出tensor([0.1210,0.3456,...,訓(xùn)練損失layer1.layer_norm.weight:tensor([...],grad_fn=)layer1.layer_norm.bias:tensor([...],grad_fn=)測試數(shù)據(jù)的網(wǎng)絡(luò)輸出tensor([[0.6543,0.2345,圖1-8位置編碼過程示意圖輸出的形狀:展示帶位置編碼的嵌入層輸出,形狀為oonnodng:實現(xiàn)位置編碼,通過正弦和余弦函數(shù)生成一個固定位置編碼矩文關(guān)系。圖1-9以HelloWorld表1-1第第2GPTGPT模型的文本生成過程,展示不同生成算法(如GreedySearch和BeamSearch)在生成GPT-2圖2-1圖2-2多頭注意力機制與Q、K、V層堆疊模型輸出形狀torch.Size([2,10,層堆疊模型輸出tensor([[[0.0213,-0.0365,...,[-0.2345,0.7654,...,-...GPT-2GPT-2注意力機制輸出形狀torch.Size([2,10,128])tensor([[[0.123,-0.456,...[0.789,0.234,......GPT選擇合適的解碼策略至關(guān)重要,因此,本節(jié)還將介紹GreedySearch和BeamSearch兩種常詳解GPT-2生成的文本序列1,345,876,238,1095,358,解碼的生成文本2.2.2GreedySearch和Search在文本生成任務(wù)中,解碼策略直接影響生成質(zhì)量。GreedySearch和BeamSearch是兩種常用的解碼方法。GreedySearch每次選擇最高概率的詞生成,雖然簡單高效,但可能導(dǎo)致局部最優(yōu),生成的文本質(zhì)量欠佳。而BeamSearch在每一步中保留多個候選路徑(稱為“束BeamSearch因保留了多條候選序列,所以計算復(fù)雜度高于GreedySearch,但生成質(zhì)量往可以把GreedySearch和BeamSearch算法比作兩個人拿著籃子挑選水果,要想辦法挑選出GreedySearch:只挑選當下看起來“最好的水果GreedySearch每次挑水果的時候都很著急,只選當下看起來“最甜的水果”BeamSearch:保留多個可能的選擇,選出一組“最搭配的水果組合BeamSearch就聰明多了,每次挑水果的時候不僅會挑最甜的一個,還會選出幾個看起來組合變得更好。最終,當所有的水果都看完,BeamSearch會將這些挑選方案中整體口味以下代碼將實現(xiàn)GreedySearch和BeamSearchbeam_search:實現(xiàn)BeamSearch算法,在每一步選擇多個候選路徑并保留得分最高的路GreedySearch生成的文本序列1,345,876,238,1095,358,BeamSearch生成的文本序列1,345,876,1102,923,145,798]GreedySearch解碼的生成文本:BeamSearch解碼的生成文本GreedySearch生成的文本序列:展示GreedySearch生成的文本序列,由于每次都選BeamSearch生成的文本序列:展示BeamSearch生成的文本序列,通過保留多個候選路徑,使得生成的內(nèi)容更加豐富,整體質(zhì)量優(yōu)于GreedySearch,適用于對生成質(zhì)量有較總的來說,GreedySearch就像“眼前有啥就拿啥”,速度快但不一定最優(yōu);BeamSearch則估方法包括BLEU(BilingualEvaluationUnderstudy)和ROUGE(Recall-OrientedUnderstudyforGistingEvaluation)BLEU分數(shù)rouge1:Precision=1.0000,Recall=1.0000,F1=1.0000rouge2:Precision=1.0000,Recall=1.0000,F1=1.0000rougeL:Precision=1.0000,=1.0000,F1=1.0000模型困惑度1.0是在文本生成方面,GPT(GenerativePre-trainedTransformer)模型表現(xiàn)出色,能夠生成具有連貫性和邏輯作者提供靈感,生成初步的內(nèi)容。這種能力在未來將進一步推動人工智能在各個領(lǐng)域的應(yīng)用。BLEU分數(shù)0.85rouge1:Precision=0.95,Recall=0.92,F1=0.94rouge2:Precision=0.89,Recall=0.87,F1=0.88rougeLPrecision=0.91,Recall=0.88,F1=0.89模型困惑度:34.56Epoch1,困惑度Epoch2,困惑度Epoch10,困惑度Epoch15,困惑度最終困惑度表2-1第第3BERT本章將深入講解模型的核心實現(xiàn)與預(yù)訓(xùn)練任務(wù),探索在自然語言處理中的強大表現(xiàn)。首先剖析模型的編碼器堆疊與自注意力機制,展示其如何在文本中捕捉復(fù)預(yù)測,介紹任務(wù)的實現(xiàn)細節(jié)。最后,展示模型在文本分類任務(wù)中的微調(diào)過程,涵蓋數(shù)據(jù)加載、訓(xùn)練步驟和評估方法,為實際應(yīng)用提供全面的指導(dǎo)。BERT圖3-1BERTBERT引入了掩碼語言模型(MaskedLanguageModel,MLM)作為自監(jiān)督預(yù)訓(xùn)練方法,編碼器堆疊輸出形狀torch.Size([2,20,編碼器堆疊輸出tensor([[[0.215,-0.307,...,[-0.432,0.544,...,-...編碼器堆疊輸出形狀:輸出形狀與輸入形狀保持一致,為圖3-2BERT輸入Token每一層輸出都是上一層的“總結(jié)BERT圖3-3編碼器輸出形狀torch.Size([2,20,掩碼后的輸入tensor([[1,103,768,...,[103,10,1024,...,掩碼標簽tensor([[-100,678,-100,...,-[910,-100,-100,...,編碼器輸出tensor([[[0.123,-0.456,...,[-0.987,0.112,...,-...預(yù)訓(xùn)練任務(wù):掩碼語言模型圖3-4一種時變MLMMLMMLM任務(wù)損失模型輸出形狀torch.Size([2,20,掩碼后的輸入tensor([[213,103,...,[45,103,1024,...,掩碼標簽tensor([[-100,678,...,-[-100,432,210,...,-模型輸出tensor([[[0.12,-0.45,...,[-1.23,0.88,...,...fromtransformersimportBertTokenizer,BertForMaskedLMimporttorch初始化BERT#text="Inthecontextofglobaleconomic thedemandfortechnologycompanies[MASKisrapidlyincreasing."#將輸入句子編碼為ID序列,并識別掩碼位置input_ids=tokenizer.encode(text,return_tensors="pt")mask_token_index=torch.where(input_idstokenizer.mask_token_id)[1]#前向傳播預(yù)測掩碼位置的詞匯分布with#predicted_token_id=logits[0,mask_token_index].argmax(axis=-1)#final_sentence=text.replace("[MASK]"predicted_word)print("生成的標題:",final_sentence)生成的標題Inthecontextofglobaleconomicgrowth,thedemandfortechnologycompanies'productsisrapidlyincreasing.BERTEpochTrainloss:0.561,Trainaccuracy:Valloss:0.549,Valaccuracy:0.750Epoch2/3Trainloss:0.483,Trainaccuracy:Valloss:0.532,Valaccuracy:0.800Epoch3/3Trainloss:0.435,Trainaccuracy:Valloss:0.510,Valaccuracy:表3-1本章深入解析了模型的關(guān)鍵實現(xiàn)及其在預(yù)訓(xùn)練任務(wù)中的具體應(yīng)用。通過剖析T大能力。此外,對掩碼語言模型任務(wù)的詳細解讀闡明了在自監(jiān)督學(xué)習(xí)中的核心優(yōu)勢,通過隨機遮蔽和預(yù)測單詞,使模型能夠獲取豐富的語義表示。最后,通過展示T在文本分類任務(wù)中的微調(diào)過程,全面講解了數(shù)據(jù)加載、模型訓(xùn)練及評估的具體步驟,為實現(xiàn)文本分類提供了實用的技術(shù)方案。在TextDataset數(shù)據(jù)集類的實現(xiàn)中,__getitem__方法負責(zé)將輸入文本轉(zhuǎn)換為模型所第第4ViT視覺Transformer(VisionTransformer,ViT)模型是將Transformer架構(gòu)引入計算機視覺領(lǐng)在模型中,圖像分塊與嵌入是適配no結(jié)構(gòu)的核心步驟。傳統(tǒng)卷積神經(jīng)網(wǎng)絡(luò)直接在二維圖像上應(yīng)用卷積核提取特征,而模型則先將圖像劃分為多個固定大小的小塊,并將每個小塊轉(zhuǎn)換為向量表示,再通過嵌入層輸入no中。具體而言,首先將圖像劃分為多個不重疊的子塊(h),并將每個子塊展平成一維向量,然后通過線性層將其映射為固定維度的嵌入向量。網(wǎng)絡(luò)架構(gòu)如圖41所示?!鴪D4-1ViT輸出形狀torch.Size([1,輸出形狀:模型最終輸出形狀為[1,1000],對應(yīng)于1000個類別的分類分數(shù),適用于ImageNet圖4-2模型輸出tensor([0.1212,0.6840,0.2761,0.3973,0.1073,0.2495,-0.3292,0.1951,0.2422]],輸出形狀torch.Size([1,ViTViT投影層映射到固定的嵌入空間。同時,添加一個分類標識符(CLStoken)用于最終分輸出形狀torch.Size([1,該輸出表明模型對圖像進行處理后得到一個10圖4-3DETR圖4-4DETR輸出形狀torch.Size([1,圖4-5ViT圖4-5中的SwinTransformer模塊內(nèi)部結(jié)構(gòu)如圖4-6所示,本質(zhì)上與編解碼器類似,也是一種圖4-6SwinTransformer訓(xùn)練與評估ViT圖4-7PatchEpoch1/5,TrainLoss:1.5402,TrainAcc:0.4567ValLoss:1.4325,ValAcc:0.4873Epoch5/5,TrainLoss:0.9832,TrainAcc:0.6789ValLoss:1.0124,ValAcc:0.6543ViTLayer1Mean[1.11111120.972222270.972222270.972222271.11111121.11111121.11111121.11111120.972222270.97222227 #1.11111120.972222271.11111121.11111120.972222270.83333341.11111121.11111120.972222270.6944445Layer1MeanLayer1VarianceLayer6MeanLayer6Variance小塊(例如物體形狀)圖4-8ViT表4-1解釋在方式輸入no中?簡述卷積的參數(shù)設(shè)置、步長、嵌入向量維度等對模型結(jié)構(gòu)的影響。第第5高階微調(diào)策略:AdapterTuning與P-應(yīng)性調(diào)整。首先介紹AdapterTuning,它通過引入少量額外參數(shù),在不大幅更改原模型的前提下實現(xiàn)高效微調(diào),極大減少計算資源。接著展示LoRA(Low-RankAdaptation)技PromptTuning與P-Tuning,著重解析如何通過調(diào)整模型輸入的提示信息,使模型適應(yīng)特定AdapterTuningAdapterTuning是大模型參數(shù)微調(diào)中常用的一種技術(shù),它通過引入少量可訓(xùn)練參數(shù)的以下代碼將實現(xiàn)一個典型的AdapterTuning過程,其中定義了Adapter模塊并將其集成到一Epoch1-Loss:0.6932,Accuracy:Epoch2-Loss:0.5810,Accuracy:Epoch3-Loss:0.4615,Accuracy:是在模型非常大的情況下。dp微調(diào)策略是在模型的不同層中插入一些小模塊,這些小模塊只包含少量可訓(xùn)練參數(shù)。相當于在每一層模型結(jié)構(gòu)中嵌入一個小組件,來學(xué)習(xí)任務(wù)特定的信息,而不去改動原有的大量參數(shù)??偟膩碚f,dp微調(diào)不僅讓模型更快適應(yīng)新任務(wù),還節(jié)省了存儲和計算資源。這種方法就像給模型插入了快捷鍵源的微調(diào)策略。LoRATuningEpoch1-Loss:0.6932,Accuracy:Epoch2-Loss:0.5820,Accuracy:Epoch3-Loss:0.4715,Accuracy:PromptTuning與P-Tuning本節(jié)探討PromptTuning和P-Tuning兩種高效的模型微調(diào)方法,它們通過設(shè)計和優(yōu)化輸入提5.3.1PromptTuning是一種通過調(diào)整輸入提示(Prompt)來引導(dǎo)模型更準確地理解任務(wù)的微調(diào)方法。在PromptTuning中,模型的權(quán)重保持不變,微調(diào)僅涉及對輸入提示進行優(yōu)化。通Epoch1-Loss:0.6932,Accuracy:Epoch2-Loss:0.5820,Accuracy:Epoch3-Loss:0.4715,Accuracy:訓(xùn)練輸出顯示了PromptTuning的效果。通過優(yōu)化Prompt部分的嵌入,模型逐漸適應(yīng)了新P-嵌入,來增強模型對任務(wù)的適應(yīng)能力。與PromptTuning不同,P-Tuning并不直接調(diào)整文本Epoch1-Loss:0.6932,Accuracy:Epoch2-Loss:0.5820,Accuracy:Epoch3-Loss:0.4715,Accuracy:5.3.3Tuning和P-Tuning以下示例將展示如何在同一個BERT模型中同時使用PromptTuning和P-Tuning,以實現(xiàn)更的文本上如何理解任務(wù)。此實例首先通過PromptTuning對輸入增加一些提示信息,然后PromptTuning和P-Tuning模塊:定義了PromptTuning和PTuning類,分別添加了不同BertWithPromptAndPTuning模型:集成了BERT模型、PromptTuning和P-Tuning。forward函數(shù)先執(zhí)行PromptTuning,再進行P-Tuning,并將擴展后的嵌入?yún)?shù)和注意力掩TextBERT模型在這篇文章中有顯著提升。Prediction:PositiveTextPromptTuning和P-Tuning在實際任務(wù)中表現(xiàn)很好。Prediction:Positive通過PromptTuning和P-Tuning的組合微調(diào),模型能夠根據(jù)提示更好地理解文本的情感傾以下示例將展示如何通過PromptTuning和P-Tuning對長文本進行情感分類微調(diào),并驗證模PromptTuning和P-Tuning模塊:定義了兩個可訓(xùn)練的Prompt模塊PromptTuning和BertWithPromptAndPTuning模型:集成PromptTuning和P-Tuning,首先對輸入進行PromptTuning,然后應(yīng)用P-Tuning,并將擴展后的輸入嵌入傳入BERT模型。長文本預(yù)測:經(jīng)過PromptTuning和P-Tuning微調(diào)后,BERT模型能夠根據(jù)提示信息理Text這是一段關(guān)于自然語言處理的長文本。近年來,隨著人工智能和機器學(xué)習(xí)技術(shù)的發(fā)展,自然語言處理逐Prediction:通過PromptTuning和P-Tuning的組合,模型能夠根據(jù)長文本的內(nèi)容準確識別其語義特征并表5-1表5-2本章深入探討了多種高效的微調(diào)策略,包括AdapterTuning、LoRATuningPromptTuning和P-Tuning,每種方法各有側(cè)重且適應(yīng)不同應(yīng)用需求。AdapterTuning通過插入適配器模塊實現(xiàn)參數(shù)輕量化微調(diào);LoRATuning則利用低秩分解優(yōu)化矩陣表示,減少微調(diào)參數(shù)規(guī)模;PromptTuning和P-Tuning通過可訓(xùn)練的提示序列,提升大模型對任務(wù)的理解釋AdapterTuning的基本原理,并說明在代碼實現(xiàn)中如何通過nn.Module類來構(gòu)建適配器模塊。在AdapterTuning中,如何實現(xiàn)僅對Adapter模塊的參數(shù)進行微調(diào),而保持原描述LoRATuning的低秩分解原理,并在代碼層面說明如何使用nn.Linear模塊來創(chuàng)建PromptTuning與P-Tuning的區(qū)別是什么?請分別簡述在PromptTuning和P-Tuning的在PromptTuning中,nn.Parameter用于定義可訓(xùn)練的提示嵌入。如何在代碼中初始化該提示嵌入的維度和長度?解釋PromptTuning如何優(yōu)化輸入提示,以增強模型對特定任展Prompt嵌入的維度,使其適應(yīng)不同批次的輸入?擴展維度的操作在PromptTuning和P-在PromptTuning和P-Tuning的實現(xiàn)中,需要更新提示的嵌入?yún)?shù)而保持原模型權(quán)重在PromptTuning和P-Tuning的實現(xiàn)中,如何使用擴展后的注意力掩碼來確保Prompt在AdapterTuning的代碼實現(xiàn)中,如何使用torch.optim.Adam優(yōu)化器只更新Adapter模在AdapterTuning中,殘差連接如何幫助保留原始特征?請說明在實現(xiàn)Adapter模塊如何通過PromptTuning的代碼實現(xiàn)長文本輸入的情感分類?請說明PromptTuningLoRATuning的降維和升維矩陣的設(shè)置如何影響微調(diào)效果?請說明在LoRATuning在BERT模型中同時應(yīng)用PromptTuning和P-Tuning第第6Helloworld!ThisisanexampletextwithHere'sanothersentence:itcontainsHTMLtagsNumbers,punctuations...andSTOPwordsareinName:text,dtype:helloworldthisisanexampletextwith?heresanothersentenceitcontainshtmltagsnumberspunctuationsandstopwordsareinthisName:processed_text,dtype:全角空格轉(zhuǎn)換為半角空格:通過“re.sub(r'\u3000',,text)”將全角空格轉(zhuǎn)為半角,Name:text,dtype:Name:augmented_text,dtype:自:1然圖6-1詞嵌入可視化圖(2DPCA分析后Tobe,ornottobe,thatisthe表6-1第第7混合精度訓(xùn)練是在深度學(xué)習(xí)中通過半精度浮點(16)和全精度浮點(32)的結(jié)合來提升效率的計算方式。在模型訓(xùn)練過程中,不需要高精度的計算使用16來降低內(nèi)存占用和加速計算,而在梯度累積等關(guān)鍵步驟中則保留32以確保計算的穩(wěn)定性。yoh提供了oh.ud.p模塊用于自動混合精度()訓(xùn)練,通過管理精度類型來有效控制模型的顯存使用和訓(xùn)練速度。自動混合精度訓(xùn)練能夠充分利用現(xiàn)代大型模型的整體訓(xùn)練性能。Epoch1,Loss:多GPU訓(xùn)練的流程與配置,主要包括DataParallel方案和ModelParallel方案。DataParallel將數(shù)據(jù)劃分到多個GPU上,通過并行計算提升批處理效率;ModelParallel則將模型分割到不同的Rank0,Epoch1,Loss:Rank1,Epoch1,Loss:Rank0,Epoch2,Loss:Rank1,Epoch2,Loss:7.2.2ParallelDataParallel方案是一種將數(shù)據(jù)批次劃分為多個子批次并分配到不同GPU上進行并行計算DataParallel。該方案在數(shù)據(jù)量大且模型可以容納在單個GPU顯存中時效果顯著。以下代碼將展示如何使用DataParallel在多GPU上并行訓(xùn)練模型。DataParallel包裝:通過nn.DataParallel包裝模型,使其支持多GPU訓(xùn)練,所有數(shù)據(jù)和訓(xùn)練循環(huán):在每個訓(xùn)練批次中,將數(shù)據(jù)和標簽移至GPU。DataParallel自動管理不同Epoch1,Loss:Epoch2,Loss:該輸出顯示了每個Epoch的平均損失,說明DataParallel方案在多GPU環(huán)境下高效地加速了7.2.3ParallelModelParallel方案適用于模型過大以至于無法在單個GPU上完整加載的情況,它將模型的GPU上,從而實現(xiàn)模型分布在多個GPU上的訓(xùn)練方式。ModelParallel適合那些內(nèi)存占用較以下代碼將展示如何在PyTorch中實現(xiàn)ModelParallel方案,將ResNet模型的前半部分和后模型劃分:通過od類將模型的前半部分(y1和y2)放在Uud0上,后半部分(y3、y4和)放在Uud1上,實現(xiàn)模型在多個間的分布。前向傳播過程:輸入數(shù)據(jù)首先在GPUcuda:0上計算模型的前半部分,接著將中間結(jié)果傳輸?shù)紾PUcuda:1,完成模型的后半部分計算,最終輸出分類結(jié)果。Epoch1,Loss:Epoch2,Loss:該結(jié)果展示了每個Epoch的平均損失。ModelParallel方案使得模型能夠在多個GPU上分布為了使讀者更好地理解DataParallel和ModelParallel并行方案,可以將這兩個方案的核心DataParallel務(wù)員把他們服務(wù)的結(jié)果匯總,得到全體顧客的反饋。這個過程類似DataParallel:將數(shù)據(jù)優(yōu)點:簡單易行,可以快速使用所有GPUModelParallel部分結(jié)果傳遞到下一個區(qū)域。ModelParallel就是這樣,把一個大模型拆成幾部分,不同部優(yōu)點:適合處理大模型,可以將超出單個GPU顯存的模型拆分在多個GPU升不如DataParallel明顯??偠灾珼ataParallel是將數(shù)據(jù)分給每個GPU去“單獨完成”,適合大批量數(shù)據(jù),但要求每個GPU都能保存完整的模型;而ModelParallel是將模型拆開“分步完成”,適合超大模后進行一次參數(shù)更新。這通過條件判斷(i+1)%accumulation_steps==0實現(xiàn)。Epoch1,Loss:Epoch2,Loss:以下代碼將展示如何在小批量訓(xùn)練中實現(xiàn)梯度累積,累積4Epoch1,Loss:Epoch2,Loss:Epoch1,Loss:Epoch2,Loss:SamplePrediction(1:positive,0:negative):表7-1DataParallel方案的基本原理是什么?在使用torch.nn.DataParallel函數(shù)進行數(shù)據(jù)并行DistributedDataParallel方案與DataParallel方案相比,有哪些關(guān)鍵差異?使用在使用DataParallel和ModelParallel方案時,模型和數(shù)據(jù)的分配方式有何不同?分別列舉兩種方案的典型應(yīng)用場景,并解釋在什么情況下適合選擇ModelParallel方案。第第8本章將介紹對比學(xué)習(xí)(ContrastiveLearning)與對抗訓(xùn)練(AdversarialTraining)在大模型Epoch1,Loss:Epoch2,Loss:Epoch3,Loss:Epoch4,Loss:Epoch5,Loss:ContrastiveLoss:PositivePairDistance(mean):0.8741NegativePairDistance(mean):1.5612SimCLRSimCLR(SimpleFrameworkforContrastiveLearningofVisualRepresentations)是一種基于01安裝和導(dǎo)入所需庫。importimporttorch.nnasnnimporttorch.optimasoptimimporttorchvision.transformsastransformsfromtorchvision.datasetsimportCIFAR10fromtorch.utils.dataimportDataLoaderimporttorch.nn.functionalasF定義對比損失函數(shù)(NT-XentLoss)#初始化編碼器和投影頭#初始化對比損失#),Epoch[1/5],Loss:0.6453Epoch[2/5],Loss:0.5829Epoch[3/5],Loss:0.5118Epoch[4/5],Loss:0.4682Epoch[5/5],Loss:Epoch[1/5],Loss:1.2345Epoch[2/5],Loss:1.1043Epoch[3/5],Loss:1.0047Epoch[4/5],Loss:0.9123Epoch[5/5],Loss:加載已完成自監(jiān)督預(yù)訓(xùn)練的編碼器,凍結(jié)其參數(shù)(或部分凍結(jié)),(全連接層)#optimizer=optim.Adam(classifier.fc.parameters()lr=1e-3)##fine_tune(classifier,train_loader,val_loader,criterion,optimizer,Epoch[1/5],Loss:1.2345,TrainAcc:64.23%,ValLoss:1.1023,ValAcc:Epoch[2/5],Loss:1.0034,TrainAcc:67.32%,ValLoss:0.9872,ValAcc:Epoch[3/5],Loss:0.9235,TrainAcc:70.45%,ValLoss:0.9123,ValAcc:Epoch[4/5],Loss:0.8452,TrainAcc:72.68%,ValLoss:0.8569,ValAcc:Epoch[5/5],Loss:0.7890,TrainAcc:74.32%,ValLoss:0.8043,ValAcc:Epoch[1/5],Loss:1.7823,Accuracy:Epoch[2/5],Loss:1.2456,Accuracy:Epoch[3/5],Loss:0.9657,Accuracy:Epoch[4/5],Loss:0.8452,Accuracy:Epoch[5/5],Loss:0.7890,Accuracy:ValidationLoss:0.8321,Accuracy:生成式對抗網(wǎng)絡(luò)()通過生成器(no)和判別器(no)之間的博弈過程實現(xiàn)數(shù)據(jù)生成能力,是深度學(xué)習(xí)中不可或缺的生成模型之一。本節(jié)首先介紹的通過對的實現(xiàn)與優(yōu)化的探索,揭示其在圖像生成、文本生成等生成任務(wù)中的應(yīng)用潛力。GANGAN本“欺騙”判別器的成功程度。GAN的損失函數(shù)通?;诙徊骒兀˙inaryCross-GAN在模型中,交替訓(xùn)練是生成器與判別器相互對抗的核心策略。在每個訓(xùn)練周期內(nèi),數(shù),更新生成器,使其生成的樣本能夠欺騙判別器。通過這一交替優(yōu)化流程,生成器不斷提升生成樣本的質(zhì)量,判別器不斷提高分辨能力。(不依賴外部文件)。運行環(huán)境:Python3.7+,PyTorch1.7+(或兼容版本)。在本地機器上訓(xùn)練時輸出結(jié)果如下(示例截取對抗訓(xùn)練是一種旨在提高模型對對抗性樣本(adversarialexamples)攻擊的抵抗能力的訓(xùn)Epoch1,Loss:Epoch2,Loss:Epoch5,Loss:Predictiononnormalinput:PositivePredictiononadversarialinput:Positive表8-1負樣本對與自定義損失函數(shù),引入了對比學(xué)習(xí)的基本原理,并通過等實現(xiàn)展示了成器與判別器的設(shè)計和損失函數(shù)的優(yōu)化,展示了的交替訓(xùn)練方法。最后,討論了對等任務(wù)中的抗擾動能力。在模型的交替訓(xùn)練中,為什么需要對生成器和判別器分別進行更新?結(jié)合代相互優(yōu)化的,給出損失的更新方式。第第9與學(xué)習(xí)率調(diào)整提升模型的收斂效率與性能表現(xiàn)。首先,對d和優(yōu)化器的原理件下如何實現(xiàn)高效訓(xùn)練。AdamW優(yōu)化器與LAMBwiseAdaptiveMomentsoptimizerforBatchtraining)的實現(xiàn)原理與應(yīng)用場景。AdamW優(yōu)化AdamWd優(yōu)化器的核心在于,它不僅考慮了當前數(shù)據(jù)帶來的即時沖動,還記住了之前學(xué)重要,也能避免在記憶過程中對不重要的信息依賴過多。這使得它能夠更穩(wěn)定地調(diào)整模型參數(shù),避免大幅波動。偏見嚴重,泛化能力變差。d通過權(quán)重衰減來防止這種情況,這就像為每個特征設(shè)置了一個忘記系數(shù)。這樣一來,模型不會盲目放大某些特征,而是合理分配關(guān)注度。Epoch[20/200],Loss:6.4321Epoch[40/200],Loss:4.1426Epoch[60/200],Loss:3.6674Epoch[80/200],Loss:3.4235Epoch[100/200],Loss:3.2001Epoch[120/200],Loss:2.9184Epoch[140/200],Loss:2.7462Epoch[160/200],Loss:Epoch[180/200],Loss:2.3845Epoch[200/200],Loss:2.1678linear.weighttensor([[1.9823]])linear.bias:LAMB普通的d優(yōu)化器雖然表現(xiàn)不錯,但在極大批量數(shù)據(jù)上的表現(xiàn)卻不如。這是因為d對每個參數(shù)的調(diào)整沒有考慮每層參數(shù)的模長關(guān)系,無法做到對大批量數(shù)據(jù)的自適應(yīng),導(dǎo)致訓(xùn)練時更新步幅過大或過小,從而影響模型的穩(wěn)定性。則會根據(jù)每一層參數(shù)的特性調(diào)整更新幅度,不僅保證了收斂速度,還能保證泛化能力,即在大批量訓(xùn)練時也能得到很好的模型效果。Epoch[20/200],Loss:6.2361Epoch[40/200],Loss:4.9217Epoch[200/200],Loss:1.5238linear.weighttensor([[2.9215]])linear.bias:tensor([1.8543])圖9-1200輪訓(xùn)練、LAMB梯度累積邏輯:每次計算損失后,用o.bkd累積梯度,當達到設(shè)定的累積步數(shù)時,用op.p更新參數(shù),然后用op.o_gd清除梯度,以準備下一輪的累積。Epoch[1],Step[20],Loss:Epoch[1],Step[40],Loss:Epoch[1],Step[60],Loss:Epoch[1],Step[80],Loss:Epoch[1],Step[100],Loss:Epoch[2],Step[20],Loss:Epoch[2],Step[40],Loss:Epoch[2],Step[60],Loss:Epoch[2],Step[80],Loss:Epoch[2],Step[100],Loss:度(相當于搬運的貨物量),不立即更新模型,而是把這次的梯度累積起來,等待更多的小批量數(shù)據(jù)的梯度累積到一起,當累積了足夠的梯度(達到目標的大批量數(shù)量才一次性更新模型。importimporttorch.nnasnnimporttorch.optimasoptimfromtorch.utils.dataimportDataLoader,#生成隨機數(shù)據(jù)X=torch.randn(num_samples,input_size)y=torch.randint(0,num_classesnum_samples,))#創(chuàng)建數(shù)據(jù)集和數(shù)據(jù)加載器dataset=TensorDataset(X,y)classdef__init__(self,input_size,super(SimpleModel,self).__init__()self.fc=nn.Linear(input_size,num_classes)defforward(self,returnself.fc(x)model=SimpleModel(input_size,num_classes)optimizer=optim.Adam(model.parameters(),lr=0.001)#Epoch[1/5],Loss:0.6932Epoch[2/5],Loss:0.6821Epoch[3/5],Loss:0.6708Epoch[4/5],Loss:0.6605Epoch[5/5],Loss:Epoch1/20,LearningRate:0.100000,Loss:0.553216Epoch2/20,LearningRate:0.095500,Loss:0.437984Epoch3/20,LearningRate:0.091000,Loss:Epoch20/20,LearningRate:0.010000,Loss:0.176452Learningrateschedule:Epoch1:LearningRate=0.100000Epoch2:LearningRate=0.095500Epoch3:LearningEpoch20:Learning余弦退火的核心思想是讓學(xué)習(xí)率按照余弦曲線下降。初始階段學(xué)習(xí)率較高,然后逐漸下降,每個周期下降速度逐漸變慢,周期結(jié)束后又會重新啟動波動有助于模型逃離局部最優(yōu)解。Epoch1:LearningRate=0.10000Epoch2:LearningRate=0.09901Epoch3:LearningRate=0.09605Epoch4:LearningEpoch48:LearningRate=0.00990Epoch49:LearningRate=0.00247Epoch50:LearningRate=0.00000Epoch51:LearningRate=0.00247Epoch52:LearningEpoch99:LearningRate=0.09605Epoch100:Learning圖9-2Warmup(CyclicLearningRate,CLR)調(diào)度則采用周期性上升和下降的學(xué)習(xí)率變化模式,幫助模Warmup代碼運行結(jié)果如下(部分輸出Epoch:1,Batch:1,LearningRate:0.000100,Loss:Epoch:1,Batch:2,LearningRate:0.000200,Loss:Epoch:1,Batch:3,LearningRate:0.000300,Loss:Epoch:1,Batch:100,LearningRate:0.010000,Loss:Epoch:2,Batch:1,LearningRate:0.010000,Loss:圖9-3除了循環(huán)學(xué)習(xí)率調(diào)度器(y),yoh還提供了其他多種學(xué)習(xí)率調(diào)度器,幫助模的動態(tài)學(xué)習(xí)率調(diào)度器。fromtorch.optim.lr_schedulerimportCosineAnnealingLR#初始化優(yōu)化器和CosineAnnealingLRoptimizer=optim.SGD(model.parameters(),lr=0.1)scheduler=CosineAnnealingLR(optimizerT_max=50)#T_max是一個周期的長度#使用CosineAnnealingLR進行學(xué)習(xí)率調(diào)整forepochin##scheduler.step()#print(f"Epoch Learningfromtorch.optim.lr_schedulerimportCosineAnnealingWarmRestarts#初始化優(yōu)化器和CosineAnnealingWarmRestartsoptimizer=optim.SGD(model.parameters(),lr=0.1)scheduler=CosineAnnealingWarmRestarts(optimizerT_0=10,T_mult=2)#使用CosineAnnealingWarmRestarts進行學(xué)習(xí)率調(diào)整forepochin##scheduler.step()#print(f"Epoch Learning收斂。動態(tài)學(xué)習(xí)調(diào)度器類型匯總?cè)绫?1所示,讀者可以根據(jù)此表快速選擇訓(xùn)練所需的調(diào)度器類型。表9-1表9-2本章深入探討了自適應(yīng)優(yōu)化器與動態(tài)學(xué)習(xí)率調(diào)度的核心技術(shù),包括d和等優(yōu)率調(diào)度策略,如線性衰減、余弦退火、up策略和循環(huán)學(xué)習(xí)率調(diào)度,展示了在訓(xùn)練初定的模型訓(xùn)練流程。第第10本章將介紹模型壓縮的兩大核心技術(shù):知識蒸餾(KnowledgeDistillation)(ModelPruning)。這些技術(shù)通過有效的參數(shù)減縮,幫助大規(guī)模模型在推理速度、存儲知識蒸餾技術(shù)借助教師學(xué)生模型結(jié)構(gòu),傳遞高效知識,以提高小模型的學(xué)習(xí)能力,降低型壓縮中的價值。知識蒸餾:教師—學(xué)生模型(Teacher-StudentModel),利用大模型(教師)指導(dǎo)小模型(學(xué)生)學(xué)習(xí),從知識蒸餾的核心在于蒸餾損失(DistillationLoss)的設(shè)計,通過優(yōu)化教師模型和學(xué)生模型Epoch1/3,Loss:0.6523Epoch2/3,Loss:0.5678Epoch3/3,Loss:習(xí)教師模型的知識;同時,蒸餾損失函數(shù)結(jié)合了散度(也稱為相對熵)和交叉熵,保證了學(xué)生模型在緊湊的參數(shù)下依然具備良好的性能。教師—importfromtorchimportnn,fromtransformersimportBertTokenizer,fromtorch.utils.dataimportDataLoader,Epoch1/3,Loss:0.7342Epoch2/3,Loss:0.5894Epoch3/3,Loss:importfromtorchimportnn,fromtransformersimport(BertForSequenceClassification,DistilBertForSequenceClassification,BertTokenizer)fromtorch.utils.dataimportDataLoader,Epoch1/3,Loss:0.6432Epoch2/3,Loss:0.5214Epoch3/3,Loss:本例將基于HuggingFace的Transformers庫來實現(xiàn),使用的環(huán)境包括Python、PyTorch等。fromtransformersimportAutoTokenizer,Trainer,TrainingArguments)fromdatasetsimportload_datasetimportimporttorch.nn.functionalasFimportnumpyasnpdefpreprocess_data(examples):padding='max_length',max_length=128)encoded_dataset=dataset.map(preprocess_data,batched=True)definputs={k:v.to(teacher_model.device)fork,vinbatch.items()/ifkinteacher_tokenizer.model_input_names}withtorch.no_grad():returndefdistillation_loss(student_logits,teacher_logits,temperature=2.0):teacher_probs=F.softmax(teacher_logits/temperature,dim=-1)returnF.kl_div(student_probs,teacher_probs,(BERT-base訓(xùn)練時間65.32推理時間8.75驗證集損失驗證集準確率模型參數(shù)量(DistilBERT訓(xùn)練時間32.54推理時間4.26驗證集損失驗證集準確率模型參數(shù)量數(shù)據(jù)集:SST-2(StanfordSentimentTreebank)(RoBERTa-large訓(xùn)練時間125.45推理時間15.23驗證集損失驗證集準確率模型參數(shù)量(DistilRoBERTa訓(xùn)練時間48.31推理時間7.85驗證集損失驗證集準確率模型參數(shù)量主要包含權(quán)重剪枝(WeightPruning)和結(jié)構(gòu)化剪枝(StructuredPruning)兩種:權(quán)重剪枝剪枝前推理時間剪枝前模型參數(shù)量剪枝后推理時間剪枝后模型參數(shù)量Sparsityinconv1.weight20.00%Sparsityinconv2.weight20.00%Testset:Averageloss:...,Accuracy:.../10000Testset:Averageloss:...,Accuracy:.../10000的手寫數(shù)字識別模型(例如使用數(shù)據(jù)集訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò))進行優(yōu)化,使其在嵌入式設(shè)備上運行更高效,減少內(nèi)存使用和計算復(fù)雜度。InitialModelAccuracy:98.23%AppliedunstructuredpruningAccuracyafterWeightPruning:97.45%AppliedstructuredpruningAccuracyafterStructuredPruning:96.83%ModelSizeafterPruning:0.87MBInferenceTimeafterPruning:1.02seconds剪枝后的模型保持了較高的精度,并且顯著降低了模型大?。ǖ郊糁蟮?.87),推理時間也有所減少。這種剪枝技術(shù)非常適合用于內(nèi)存和計算資型的運行效率。BERT(LayerPruning)和注意力頭剪枝(AttentionHeadPruning),以下將展示如何使用HuggingFace的transformers庫剪枝BERT模型的注意力頭,并展示剪InitialModelAccuracy:92.45%Prunedattentionheadsinlayer3Prunedlayer11AccuracyafterPruning:91.60%ModelSizeafterPruning:304.87MBInferenceTimeafterPruning:8.24表10-1表10-2在權(quán)重剪枝中,如何使用oh.nn.u.pun.1_unuud對神經(jīng)網(wǎng)絡(luò)的特定層進剪枝比例來優(yōu)化網(wǎng)絡(luò)性能。第第11本章將向讀者詳細解析大規(guī)模模型訓(xùn)練中的關(guān)鍵環(huán)節(jié),包括數(shù)據(jù)預(yù)處理與oknon的是高質(zhì)量預(yù)訓(xùn)練的基礎(chǔ)。通過展示okn、okn等常用分詞器的使用方、多節(jié)點環(huán)境的部署,以提升訓(xùn)練效率。同時,將介紹如何利用nood監(jiān)控訓(xùn)機制,保障訓(xùn)練不受突發(fā)事件影響,并分析中斷對模型收斂的潛在影響與應(yīng)對策略。數(shù)據(jù)預(yù)處理與Tokenization本節(jié)將圍繞數(shù)據(jù)預(yù)處理與oknon的核心步驟展開,以確保大規(guī)模文本數(shù)據(jù)在預(yù)訓(xùn)練達能力與信息含量。此外,還將介紹okn、okn等常用分詞器的使用方法,以便高效將處理后的數(shù)據(jù)轉(zhuǎn)換為模型能夠接收的格式,從而提升訓(xùn)練效果。#去重操作#顯示去重結(jié)果print("DataafterremovingfortextinDataafterremovingHelloMachinelearningisfascinatingDeeplearningmodelsarepowerfulPythonisgreatHelloworldThisisanexampletextwithhtmlDataafterText-HelloworldText2:-MachinelearningisfascinatingText3:-DeeplearningmodelsarepowerfulText4:-PythonisgreatText5:-HelloworldThisisanexampletextwithhtmlLabeledText:Helloworld,Label:Text:Machinelearningisfascinating,Label:TechnologyText:Deeplearningmodelsarepowerful,Label:OtherText:Pythonisgreat,Label:ProgrammingText:HelloworldThisisanexampletextwithhtmltags,Label:結(jié)果。編碼后的ID表示每個分詞的索引,同時AttentionMask用于掩碼填充位置。編碼后的ID及AttentionMask同樣便于模型計算。標準化的輸入。一個具體的應(yīng)用案例是使用分詞器和2分詞器對不同類型的句子進行編碼,以便在情感分析任務(wù)中為模型提供一致的數(shù)據(jù)輸入格式。代碼實現(xiàn)如下:BERTAttentionMask和GPT-2AttentionMask反映了填充位置,為模型提供了用于處理句下面將逐步講解如何使用PyTorch的分布式數(shù)據(jù)并行(DistributedDataParallel,DDP)模pipinstalldefsetup(rank,dist.init_process_group("gloo",rank=rank,world_size=world_size)defRank0,Epoch[1/10],Step[1/16],Loss:1.2345Rank0,Epoch[1/10],Step[11/16]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論