لنبدأ بما هو نموذج اللغة الكبير فعليًا: وظيفة رياضية ضخمة تتنبأ بالكلمة التالية في تسلسل. هذا كل شيء. لا يوجد وعي، ولا فهم بالمعنى البشري، فقط مطابقة إحصائية للأنماط بمقياس يبدو مخيفًا ذكائيًا. عندما تكتب "عاصمة فرنسا هي" في كلود أو ChatGPT، النموذج لا "يعلم" بوجود باريس. بل يحسب أنه بناءً على بلايين الأمثلة التدريبية، فإن الرمز "باريس" له أعلى احتمالية للظهور. إنه تكملة تلقائية قرأت الإنترنت بأكمله. البنية التي تجعل ذلك ممكنًا تُسمى المحول، اخترعتها باحثو جوجل في 2017. إليك تحليل خطوة بخطوة لكيفية تحويل النص إلى استجابة:
- التجزئة: يتم تقطيع نص الإدخال إلى أجزاء تسمى رموز (حوالي ثلاثة أرباع الكلمة). "مرحبا بالعالم" تصبح ["مرحبا", " العالم"].
- التضمين: كل رمز يتحول إلى متجه، قائمة من مئات الأرقام التي تمثل معناها في الفضاء الرياضي. الكلمات ذات المعاني المتشابهة تتجمع معًا في هذه الهندسة المجردة.
- آلية الانتباه: هذه هي الصلصة السرية. النموذج يحسب أي الرموز يجب أن "تولي اهتمامًا" لأي من الرموز الأخرى. في "الحيوان لم يعبر الشارع لأنه كان متعبًا جدًا"، يساعد الانتباه النموذج على ربط "كان" بـ "الحيوان" بدلاً من "الشارع".
- طبقات المعالجة: نماذج LLM الحديثة مثل GPT-4 أو Claude 3 لديها عشرات من طبقات المحول، كل واحدة تصقل التمثيل. الطبقات الأولى تكتشف أنماط التركيب، والطبقات الوسطى تفهم المعنى، والطبقات المتأخرة تتعامل مع الاستنتاج.
- التنبؤ: الطبقة النهائية تُخرج احتمالات لكل رمز ممكن يلي. النموذج يأخذ عينة من هذا التوزيع (مع بعض العشوائية للإبداع) ويخرج كلمة. ثم يغذي تلك الكلمة ويُتنبأ بالجديدة. يتكرر حتى الانتهاء.
إليك ما يبدو عليه ذلك فعليًا بلغة البرمجة والرياضيات. هذا مبسط ولكنه يلتقط المنطق الأساسي: function generate_text(input_text, max_tokens): tokens = tokenize(input_text) for i in range(max_tokens): # Convert tokens to embeddings (vectors) embeddings = embedding_layer(tokens) # embeddings shape: [sequence_length, embedding_dim] # Apply transformer layers hidden_state = embeddings for layer in transformer_layers: hidden_state = layer.apply(hidden_state) # Get probabilities for next token logits = output_layer(hidden_state[-1]) # Use last position probabilities = softmax(logits) # probabilities shape: [vocabulary_size] # Sample next token (with temperature for randomness) next_token = sample(probabilities, temperature=0.7) tokens.append(next_token) if next_token == END_TOKEN: break return detokenize(tokens) function transformer_layer(hidden_state): # Multi-head self-attention attention_output = multi_head_attention(hidden_state) hidden_state = layer_norm(hidden_state + attention_output) # Residual connection # Feed-forward network ff_output = feed_forward(hidden_state) hidden_state = layer_norm(hidden_state + ff_output) # Residual connection return hidden_state function multi_head_attention(X): # X shape: [seq_len, d_model] # Split into multiple attention heads outputs = [] for head in range(num_heads): # Linear projections to Query, Key, Value Q = X @ W_q[head] # [seq_len, d_k] K = X @ W_k[head] # [seq_len, d_k] V = X @ W_v[head] # [seq_len, d_v] # Scaled dot-product attention # scores[i,j] = how much position i attends to position j scores = (Q @ K.transpose()) / sqrt(d_k) # [seq_len, seq_len] # Mask future positions (can't look ahead) scores = mask_future(scores) # Convert to probabilities attention_weights = softmax(scores) # [seq_len, seq_len] # Apply attention to values output = attention_weights @ V # [seq_len, d_v] outputs.append(output) # Concatenate all heads and project return concatenate(outputs) @ W_o الرياضيات وراء الانتباه هي حيث يحدث السحر. لكل موقع في السلسلة، يقوم النموذج بحساب: Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) * V ما يعني: Q (الاستفسار) يسأل "ما الذي أبحث عنه؟"، K (المفتاح) يجيب "ما الذي أحتويه؟"، وV (القيمة) يقدم "ها هي معلوماتي الفعلية." المنتج النقطي QK^T يقيس التشابه بين الاستفسارات والمفاتيح. المواضع ذات التشابه العالي تحصل على أوزان انتباه عالية بعد ال softmax. تلك الأوزان تسحب المعلومات ذات الصلة من القيم. على سبيل المثال، معالجة "القط جلس على الحصير لأنه كان ناعمًا":
- عندما يتم التنبؤ بعد "كان"، الاستفسار عن "كان" يحسب تشابهًا عاليًا مع المفتاح "الحصير" (السوفت ماكس قد يعطي وزن 0.7) وتشابهًا منخفضًا مع "القط" (وزن 0.1)
- المتجهات القيم تُوزن بهذه الدرجات، لذا "كان" يسحب غالبًا من تمثيل "الحصير"
- هذا يتدفق عبر عشرات الطبقات، كل واحدة تصقل الارتباطات
عملية التدريب هي انحدار صغري على نطاق واسع: function train_llm(training_data, num_epochs): # Initialize billions of parameters randomly model = initialize_model(num_parameters=175_000_000_000) for epoch in range(num_epochs): for batch in training_data: # Mask out some tokens to predict input_tokens = batch[:-1] # All but last target_tokens = batch[1:] # All but first # Forward pass: predict next tokens predictions = model.forward(input_tokens) # Calculate loss: how wrong were we? loss = cross_entropy(predictions, target_tokens) # Cross entropy: -sum(target * log(prediction)) # Penalizes confident wrong predictions heavily # Backward pass: calculate gradients gradients = compute_gradients(loss, model.parameters) # Update parameters to reduce loss for param, grad in zip(model.parameters, gradients): param -= learning_rate * grad return model كل تحديث للمعلمات يحاول تقليل خسارة الأنتروبي المتبادل: كيف فوجئ النموذج بالرمز التالي الفعلي؟ إذا كان قد تنبأ بـ "باريس" باحتمالية 95% وكانت "باريس" صحيحة، تكون الخسارة ضئيلة. إذا تنبأ بـ "لندن" باحتمالية 60% ولكن "باريس" كانت صحيحة، فإن الخسارة كبيرة. افعل هذا عبر تريليونات الأمثلة وبلايين المعلمات، سيتعلم النموذج الهيكل الإحصائي للغة. عملية التدريب هي حيث تصبح الأمور مكلفة وفوضوية. تتعلم هذه النماذج من خلال عملية تسمى التعلم غير الموجه على مجموعات بيانات نصية ضخمة: كتب، مواقع الكترونية، مستودعات الشفرات، أوراق علمية. خلال مرحلة التدريب المسبق، يظهر الباحثون للنموذج نصًا مع إخفاء بعض الكلمات ويجعلونه يتنبأ بها. كل تخمين خاطئ يولد إشارة خطأ تدفع بلايين المعلمات (الأرقام القابلة للتعديل داخل النموذج) قليلاً إلى تنبؤات أفضل. تم الإبلاغ عن أن GPT-4 يحتوي على أكثر من تريليون معلمة وكلف أكثر من 100 مليون دولار لتدريبها على عشرات الآلاف من وحدات المعالجة الرسومية لمدة شهور. بعد التدريب المسبق يأتي التحسين الدقيق، حيث يقيم المدربون البشريون ردود النموذج، مما يعلمه أن يكون مفيدًا بدلاً من أن يكون دقيقًا فقط. لهذا السبب كلود لن يكتب بيانك وChatGPT يرفض طلبات معينة. التعلم المعزز من التغذية الراجعة البشرية (RLHF) يعيد توجيه توزيعات الاحتمالات حرفياً لتجنب المخرجات السامة. يتعلم النموذج أن أنماط الردود المعينة تحصل على درجات أعلى من البشر، لذا فإنه يفضل تلك الأنماط. الآن إليك سبب تعرض الصناعات التنبؤية للعصف الشامل. أي مجال حيث النجاح يعني التعرف على الأنماط والتنبؤ بالنتائج هو في الأساس مشكلة LLM في جوهرها. تنبؤ الطقس؟ مطابقة الأنماط التاريخية للبيئة الجوية. تداول الأسهم؟ إيجاد الارتباطات في تحركات الأسعار ومزاج الأخبار. تشخيص طبي؟ مطابقة الأعراض بأنماط الأمراض من ملايين سجل الحالات. مراجعة الوثائق القانونية؟ تحديد السوابق ذات الصلة وبنود العقود. خدمة العملاء؟ التنبؤ بالاستجابة التي تحل المشكلة بناءً على التذاكر السابقة. الميزة التي يحملها الذكاء الاصطناعي هي وحشية وبسيطة: المقياس. قد يراجع طبيب الأشعة 50,000 أشعة سينية في حياته المهنية. بينما يتدرب نموذج الذكاء الاصطناعي على 50 مليون. قد يقرأ محلل في صندوق التحوط مئات التقارير الفصلية. بينما يعالج نموذج اللغة كل تزامن مكالمات الأرباح، وإيداعات SEC، وملاحظات المحللين المنشورة عالميًا في الوقت الفعلي. تتراكم ميزة التعرف على الأنماط حتى تصبح الخبرة البشرية ديكورية بدلاً من أن تكون عملية. نحن نشهد بالفعل تسارع الاستيلاء على السلطة. GPT من بلومبرج، والذي تم تدريبه خصيصًا على البيانات المالية، يتفوق على المحللين البشريين في التنبؤ بحركات السوق من الأخبار. حلت AlphaFold من ديب مايند مشكلة طي البروتين التي حيرت علماء الأحياء لمدة 50 عامًا عن طريق معالجة الهياكل الجزيئية كمسألة تنبؤ. يكتب GitHub Copilot حوالي 40٪ من التعليمات البرمجية في المستودعات حيث يكون مفعلًا. هذه ليست أدوات ضيقة تساعد البشر، بل هي تقنيات استبدال تجعل مجموعات كاملة من المهارات زائدة عن الحاجة. الحقيقة غير المريحة هي أن معظم الأعمال المعرفية هي تنبؤ متنكراً في شكل خبرة. المحامون يتنبؤون بنتائج القضايا ويكتبون المستندات بناءً على قوالب. المحاسبون يتنبؤون بالمسؤولية الضريبية ومخاطر التدقيق. المسوقون يتنبؤون بالرسالة التي ستلقى صدى مع الجمهور. المعلمون يتنبؤون أي تفسير سيقوم بتوضيح مفهوم ما. الأطباء يتنبؤون أي علاج سيعالج أي مرض. إذا كان عملك يتضمن النظر إلى البيانات وقول "بناءً على X، أعتقد أن Y سيحدث"، فأنت في منطقة الانفجار. السؤال الوحيد هو التوقيت.