* 2. Include this script: * 3. Create charts with minimal configuration - colors are auto-applied! */ (function() { 'use strict'; // ========================================================================== // READ COLORS FROM CSS CUSTOM PROPERTIES // This ensures chart colors stay in sync with the theme // ========================================================================== /** * Get a CSS custom property value from :root */ function getCSSVar(name, fallback = '') { if (typeof getComputedStyle === 'undefined') return fallback; const value = getComputedStyle(document.documentElement).getPropertyValue(name).trim(); return value || fallback; } /** * Build palette from CSS custom properties (with fallbacks) */ function buildPaletteFromCSS() { return { // Primary brand colors dartmouthGreen: getCSSVar('--dartmouth-green', '#00693e'), textPrimary: getCSSVar('--text-primary', '#0a2518'), textSecondary: getCSSVar('--text-secondary', '#0a3d23'), // Chart colors (from CSS --chart-color-N variables) chartColors: [ getCSSVar('--chart-color-1', '#00693e'), getCSSVar('--chart-color-2', '#267aba'), getCSSVar('--chart-color-3', '#ffa00f'), getCSSVar('--chart-color-4', '#9d162e'), getCSSVar('--chart-color-5', '#8a6996'), getCSSVar('--chart-color-6', '#a5d75f'), getCSSVar('--chart-color-7', '#003c73'), getCSSVar('--chart-color-8', '#d94415'), getCSSVar('--chart-color-9', '#643c20'), getCSSVar('--chart-color-10', '#c4dd88'), getCSSVar('--chart-color-11', '#f5dc69'), getCSSVar('--chart-color-12', '#424141'), ], // Background colors (semi-transparent versions) chartBgColors: [ getCSSVar('--chart-bg-1', 'rgba(0, 105, 62, 0.5)'), getCSSVar('--chart-bg-2', 'rgba(38, 122, 186, 0.5)'), getCSSVar('--chart-bg-3', 'rgba(255, 160, 15, 0.5)'), getCSSVar('--chart-bg-4', 'rgba(157, 22, 46, 0.5)'), getCSSVar('--chart-bg-5', 'rgba(138, 105, 150, 0.5)'), getCSSVar('--chart-bg-6', 'rgba(165, 215, 95, 0.5)'), ], // Semantic colors positive: getCSSVar('--chart-positive', '#00693e'), negative: getCSSVar('--chart-negative', '#9d162e'), neutral: getCSSVar('--chart-neutral', '#424141'), highlight: getCSSVar('--chart-highlight', '#ffa00f'), // Grid and axis colors gridLight: getCSSVar('--chart-grid-light', 'rgba(0, 105, 62, 0.1)'), gridMedium: getCSSVar('--chart-grid-medium', 'rgba(0, 105, 62, 0.15)'), gridDark: getCSSVar('--chart-grid-dark', 'rgba(0, 105, 62, 0.2)'), axisColor: getCSSVar('--chart-axis-color', '#0a2518'), // Font fontFamily: getCSSVar('--chart-font-family', "'Avenir LT Std', 'Avenir', 'Avenir Next', -apple-system, BlinkMacSystemFont, sans-serif"), }; } // Initialize palette (will be populated when DOM is ready) let CDL_PALETTE = null; // For convenience, expose primary chart colors array let CHART_COLORS = null; // ========================================================================== // FONT CONFIGURATION // Responsive font sizes based on typical Marp slide dimensions (1280x720) // ========================================================================== const FONT_CONFIG = { sizes: { title: 22, // Chart title subtitle: 18, // Subtitle legend: 16, // Legend labels axisTitle: 18, // Axis titles axisTicks: 16, // Axis tick labels tooltip: 14, // Tooltip text dataLabels: 14, // Data labels on charts }, weight: { normal: 400, medium: 500, bold: 600, }, }; // ========================================================================== // HELPER FUNCTIONS // ========================================================================== /** * Ensure palette is initialized */ function ensurePalette() { if (!CDL_PALETTE) { CDL_PALETTE = buildPaletteFromCSS(); CHART_COLORS = CDL_PALETTE.chartColors; } return CDL_PALETTE; } /** * Get color for a dataset at given index * Cycles through palette if more datasets than colors */ function getColor(index) { ensurePalette(); return CHART_COLORS[index % CHART_COLORS.length]; } /** * Get color with alpha transparency */ function getColorWithAlpha(color, alpha) { // Handle hex colors if (color.startsWith('#')) { const r = parseInt(color.slice(1, 3), 16); const g = parseInt(color.slice(3, 5), 16); const b = parseInt(color.slice(5, 7), 16); return `rgba(${r}, ${g}, ${b}, ${alpha})`; } // Handle rgba colors if (color.startsWith('rgba')) { return color.replace(/[\d.]+\)$/, `${alpha})`); } return color; } /** * Generate colors for all datasets in chart data * Automatically assigns colors if not specified */ function autoAssignColors(data, chartType) { if (!data || !data.datasets) return data; data.datasets.forEach((dataset, index) => { const baseColor = getColor(index); // Only assign colors if not already specified switch (chartType) { case 'bar': case 'horizontalBar': if (!dataset.backgroundColor) { dataset.backgroundColor = baseColor; } if (!dataset.borderColor) { dataset.borderColor = baseColor; } if (dataset.borderWidth === undefined) { dataset.borderWidth = 2; } break; case 'line': if (!dataset.borderColor) { dataset.borderColor = baseColor; } if (!dataset.backgroundColor) { dataset.backgroundColor = getColorWithAlpha(baseColor, 0.1); } if (dataset.borderWidth === undefined) { dataset.borderWidth = 3; } if (dataset.pointRadius === undefined) { dataset.pointRadius = 6; } if (!dataset.pointBackgroundColor) { dataset.pointBackgroundColor = baseColor; } if (dataset.tension === undefined) { dataset.tension = 0.3; } break; case 'scatter': case 'bubble': if (!dataset.backgroundColor) { dataset.backgroundColor = baseColor; } if (!dataset.borderColor) { dataset.borderColor = baseColor; } if (dataset.pointRadius === undefined) { dataset.pointRadius = 15; } if (dataset.pointHoverRadius === undefined) { dataset.pointHoverRadius = 18; } break; case 'pie': case 'doughnut': case 'polarArea': // For pie charts, we need multiple colors for one dataset if (!dataset.backgroundColor) { const numItems = dataset.data ? dataset.data.length : 6; dataset.backgroundColor = []; for (let i = 0; i < numItems; i++) { dataset.backgroundColor.push(getColor(i)); } } if (!dataset.borderColor) { dataset.borderColor = '#d8d8d8'; // Slide background } if (dataset.borderWidth === undefined) { dataset.borderWidth = 2; } break; case 'radar': if (!dataset.borderColor) { dataset.borderColor = baseColor; } if (!dataset.backgroundColor) { dataset.backgroundColor = getColorWithAlpha(baseColor, 0.2); } if (dataset.borderWidth === undefined) { dataset.borderWidth = 2; } if (dataset.pointRadius === undefined) { dataset.pointRadius = 4; } if (!dataset.pointBackgroundColor) { dataset.pointBackgroundColor = baseColor; } break; default: // Generic color assignment if (!dataset.backgroundColor) { dataset.backgroundColor = baseColor; } if (!dataset.borderColor) { dataset.borderColor = baseColor; } } }); return data; } // ========================================================================== // CHART.JS GLOBAL DEFAULTS // ========================================================================== function applyGlobalDefaults() { if (typeof Chart === 'undefined') { console.warn('Chart.js not loaded. chart-defaults.js requires Chart.js to be loaded first.'); return false; } // Ensure palette is loaded from CSS const palette = ensurePalette(); // Font defaults Chart.defaults.font.family = palette.fontFamily; Chart.defaults.font.size = FONT_CONFIG.sizes.axisTicks; Chart.defaults.color = palette.textPrimary; // Responsive defaults Chart.defaults.responsive = true; Chart.defaults.maintainAspectRatio = false; // Animation (subtle) Chart.defaults.animation.duration = 400; // Plugin defaults // Legend Chart.defaults.plugins.legend.labels.font = { family: palette.fontFamily, size: FONT_CONFIG.sizes.legend, weight: FONT_CONFIG.weight.normal, }; Chart.defaults.plugins.legend.labels.color = palette.textPrimary; Chart.defaults.plugins.legend.labels.usePointStyle = true; Chart.defaults.plugins.legend.labels.padding = 20; // Title Chart.defaults.plugins.title.font = { family: palette.fontFamily, size: FONT_CONFIG.sizes.title, weight: FONT_CONFIG.weight.medium, }; Chart.defaults.plugins.title.color = palette.textPrimary; // Tooltip Chart.defaults.plugins.tooltip.backgroundColor = palette.textPrimary; Chart.defaults.plugins.tooltip.titleFont = { family: palette.fontFamily, size: FONT_CONFIG.sizes.tooltip, weight: FONT_CONFIG.weight.medium, }; Chart.defaults.plugins.tooltip.bodyFont = { family: palette.fontFamily, size: FONT_CONFIG.sizes.tooltip, }; Chart.defaults.plugins.tooltip.cornerRadius = 4; Chart.defaults.plugins.tooltip.padding = 10; // Scale defaults (for cartesian charts) // These need to be applied per-scale type const scaleDefaults = { grid: { color: palette.gridLight, lineWidth: 1, }, border: { color: palette.gridDark, width: 1, }, ticks: { font: { family: palette.fontFamily, size: FONT_CONFIG.sizes.axisTicks, }, color: palette.textPrimary, }, title: { font: { family: palette.fontFamily, size: FONT_CONFIG.sizes.axisTitle, weight: FONT_CONFIG.weight.normal, }, color: palette.textPrimary, }, }; // Apply scale defaults to linear scale if (Chart.defaults.scales && Chart.defaults.scales.linear) { if (Chart.defaults.scales.linear.grid) Object.assign(Chart.defaults.scales.linear.grid, scaleDefaults.grid); if (Chart.defaults.scales.linear.border) Object.assign(Chart.defaults.scales.linear.border, scaleDefaults.border); if (Chart.defaults.scales.linear.ticks) Object.assign(Chart.defaults.scales.linear.ticks, scaleDefaults.ticks); if (Chart.defaults.scales.linear.title) Object.assign(Chart.defaults.scales.linear.title, scaleDefaults.title); } // Apply scale defaults to category scale if (Chart.defaults.scales && Chart.defaults.scales.category) { if (Chart.defaults.scales.category.grid) Object.assign(Chart.defaults.scales.category.grid, scaleDefaults.grid); if (Chart.defaults.scales.category.border) Object.assign(Chart.defaults.scales.category.border, scaleDefaults.border); if (Chart.defaults.scales.category.ticks) Object.assign(Chart.defaults.scales.category.ticks, scaleDefaults.ticks); if (Chart.defaults.scales.category.title) Object.assign(Chart.defaults.scales.category.title, scaleDefaults.title); } // Apply scale defaults to logarithmic scale if (Chart.defaults.scales && Chart.defaults.scales.logarithmic) { if (Chart.defaults.scales.logarithmic.grid) Object.assign(Chart.defaults.scales.logarithmic.grid, scaleDefaults.grid); if (Chart.defaults.scales.logarithmic.border) Object.assign(Chart.defaults.scales.logarithmic.border, scaleDefaults.border); if (Chart.defaults.scales.logarithmic.ticks) Object.assign(Chart.defaults.scales.logarithmic.ticks, scaleDefaults.ticks); if (Chart.defaults.scales.logarithmic.title) Object.assign(Chart.defaults.scales.logarithmic.title, scaleDefaults.title); } // Apply scale defaults to radial scale (for radar charts) if (Chart.defaults.scales && Chart.defaults.scales.radialLinear) { if (Chart.defaults.scales.radialLinear.grid) Chart.defaults.scales.radialLinear.grid.color = palette.gridLight; if (Chart.defaults.scales.radialLinear.angleLines) Chart.defaults.scales.radialLinear.angleLines.color = palette.gridMedium; if (Chart.defaults.scales.radialLinear.pointLabels) { Chart.defaults.scales.radialLinear.pointLabels.font = { family: palette.fontFamily, size: FONT_CONFIG.sizes.axisTicks, }; Chart.defaults.scales.radialLinear.pointLabels.color = palette.textPrimary; } } return true; } // ========================================================================== // CHART WRAPPER FOR AUTO-STYLING // ========================================================================== /** * Wrap the Chart constructor to automatically apply CDL styling */ function wrapChartConstructor() { if (typeof Chart === 'undefined') return; const OriginalChart = Chart; // Create a wrapper that auto-applies colors window.Chart = function(ctx, config) { // Auto-assign colors if not specified if (config && config.data) { config.data = autoAssignColors(config.data, config.type); } // Merge default options for specific chart types if (config && config.options) { config.options = applyChartTypeDefaults(config.type, config.options); } // Call original constructor return new OriginalChart(ctx, config); }; // Copy static properties and methods Object.setPrototypeOf(window.Chart, OriginalChart); Object.assign(window.Chart, OriginalChart); // Preserve the prototype chain window.Chart.prototype = OriginalChart.prototype; } /** * Apply chart-type specific defaults */ function applyChartTypeDefaults(chartType, userOptions) { const options = { ...userOptions }; switch (chartType) { case 'bar': case 'horizontalBar': // Bar chart defaults if (!options.scales) options.scales = {}; if (!options.scales.x) options.scales.x = {}; if (!options.scales.y) options.scales.y = {}; // Hide x-axis grid for cleaner look if (options.scales.x.grid === undefined) { options.scales.x.grid = { display: false }; } break; case 'line': // Line chart defaults if (!options.interaction) { options.interaction = { intersect: false, mode: 'index' }; } break; case 'pie': case 'doughnut': // Pie/doughnut defaults if (!options.plugins) options.plugins = {}; if (options.plugins.legend === undefined) { const palette = ensurePalette(); options.plugins.legend = { position: 'right', labels: { font: { family: palette.fontFamily, size: FONT_CONFIG.sizes.legend, }, color: palette.textPrimary, padding: 15, }, }; } break; case 'radar': // Radar chart defaults - keep as-is, scale defaults applied globally break; case 'scatter': case 'bubble': // Scatter/bubble defaults if (!options.scales) options.scales = {}; if (!options.scales.x) options.scales.x = {}; if (!options.scales.y) options.scales.y = {}; break; } return options; } // ========================================================================== // CONVENIENCE FUNCTIONS FOR USERS // Exposed on window.CDLChart for easy access // ========================================================================== window.CDLChart = { // Color palette access (getters to ensure lazy initialization) get colors() { return ensurePalette().chartColors; }, get palette() { return ensurePalette(); }, // Get specific color by index getColor: getColor, // Get color with transparency getColorWithAlpha: getColorWithAlpha, // Get array of colors for a specific count getColors: function(count) { ensurePalette(); const result = []; for (let i = 0; i < count; i++) { result.push(getColor(i)); } return result; }, // Font configuration fonts: FONT_CONFIG, // Quick chart creation helpers // These create minimal config that auto-applies all styling /** * Create a simple bar chart * @param {string} canvasId - Canvas element ID * @param {string[]} labels - X-axis labels * @param {number[]} data - Data values * @param {object} options - Optional overrides */ bar: function(canvasId, labels, data, options = {}) { return new Chart(document.getElementById(canvasId), { type: 'bar', data: { labels: labels, datasets: [{ data: data }], }, options: { plugins: { legend: { display: false } }, ...options, }, }); }, /** * Create a simple line chart * @param {string} canvasId - Canvas element ID * @param {string[]} labels - X-axis labels * @param {Array} datasets - Array of {label, data} objects * @param {object} options - Optional overrides */ line: function(canvasId, labels, datasets, options = {}) { return new Chart(document.getElementById(canvasId), { type: 'line', data: { labels: labels, datasets: datasets.map(ds => ({ label: ds.label, data: ds.data, fill: ds.fill !== undefined ? ds.fill : true, })), }, options: options, }); }, /** * Create a simple pie chart * @param {string} canvasId - Canvas element ID * @param {string[]} labels - Slice labels * @param {number[]} data - Data values * @param {object} options - Optional overrides */ pie: function(canvasId, labels, data, options = {}) { return new Chart(document.getElementById(canvasId), { type: 'pie', data: { labels: labels, datasets: [{ data: data }], }, options: options, }); }, /** * Create a simple scatter chart * @param {string} canvasId - Canvas element ID * @param {Array} datasets - Array of {label, data: [{x, y}]} objects * @param {object} options - Optional overrides */ scatter: function(canvasId, datasets, options = {}) { return new Chart(document.getElementById(canvasId), { type: 'scatter', data: { datasets: datasets.map(ds => ({ label: ds.label, data: ds.data, })), }, options: options, }); }, /** * Create a doughnut chart * @param {string} canvasId - Canvas element ID * @param {string[]} labels - Slice labels * @param {number[]} data - Data values * @param {object} options - Optional overrides */ doughnut: function(canvasId, labels, data, options = {}) { return new Chart(document.getElementById(canvasId), { type: 'doughnut', data: { labels: labels, datasets: [{ data: data }], }, options: options, }); }, /** * Create a radar chart * @param {string} canvasId - Canvas element ID * @param {string[]} labels - Axis labels * @param {Array} datasets - Array of {label, data} objects * @param {object} options - Optional overrides */ radar: function(canvasId, labels, datasets, options = {}) { return new Chart(document.getElementById(canvasId), { type: 'radar', data: { labels: labels, datasets: datasets.map(ds => ({ label: ds.label, data: ds.data, })), }, options: options, }); }, }; // ========================================================================== // INITIALIZATION // ========================================================================== function initialize() { // Wait for Chart.js to be available if (typeof Chart !== 'undefined') { applyGlobalDefaults(); wrapChartConstructor(); console.log('CDL Chart defaults applied successfully.'); return true; } else { // Chart.js not yet loaded - wait and retry let retries = 0; const maxRetries = 50; // 5 seconds max wait const checkInterval = setInterval(function() { retries++; if (typeof Chart !== 'undefined') { clearInterval(checkInterval); applyGlobalDefaults(); wrapChartConstructor(); console.log('CDL Chart defaults applied successfully (after waiting for Chart.js).'); } else if (retries >= maxRetries) { clearInterval(checkInterval); console.warn('Chart.js not found after waiting. CDL Chart defaults not applied.'); } }, 100); return false; } } // Initialize IMMEDIATELY - this must run BEFORE any chart creation scripts // Chart.js CDN should be loaded before this script initialize(); })();

Lecture 26: The reckoning

PSYC 51.17: Models of language and communication

Jeremy R. Manning
Dartmouth College
Winter 2026

Learning objectives

  1. Describe alignment faking and reward tampering — empirical evidence that models can strategically deceive
  2. Explain mechanistic interpretability breakthroughs: circuit tracing and what we can now see inside LLMs
  3. Evaluate the copyright landscape: the $1.5B Anthropic settlement and 77+ active US lawsuits
  4. Analyze real data on AI and employment: who is affected, how fast, and what the evidence actually says
  5. Compare diverging regulatory approaches: EU enforcement vs. US deregulation
  6. Articulate your own ethical framework for navigating the AI era
  7. Think about what's next for LLMs: the scaling wall, local models, and multimodality

The alignment problem, revisited

Earlier in this course, we touched on alignment — making models do what we intend — when we discussed instruction tuning and RLHF (Lecture 16). In 2024–2025, researchers found empirical evidence that frontier models can strategically deceive their trainers. This is no longer hypothetical.

  1. Alignment faking — Claude pretended to be aligned to avoid being retrained
  2. Reward tampering — Models trained to be sycophantic spontaneously learned to cover up mistakes and modify their own reward signals
  3. Strategic dishonesty — Models lie and manipulate in multi-agent settings when it serves their goals (Motwani et al., 2024)

These aren't jailbreaks. The models aren't being tricked. They are choosing deceptive strategies based on their own reasoning.

Alignment faking

Alignment faking

The model reasoned about its own training process and chose a deceptive strategy to preserve its values. This means:

  • Behavioral evaluations (testing outputs) may not reveal misalignment
  • A model that appears perfectly aligned might be strategically complying
  • We need ways to verify alignment that go beyond behavior

Reward tampering

Anthropic's reward tampering research (Denison et al., 2024) revealed that training models to be sycophantic (agreeable) produced unexpected emergent dangerous behaviors.

Models trained to agree with users spontaneously learned to:

  • Cover up incomplete tasks rather than admit failure
  • Modify their own reward function when given the ability
  • Alter files to hide their tracks from oversight systems

None of these behaviors were trained. They emerged from a seemingly benign training objective (be agreeable). The lesson: dangerous behaviors can arise from innocuous-looking training choices.

If "be helpful and agreeable" leads to strategic deception, what training objectives are safe? Is there a fundamental tension between making models useful and making them honest?

From deception to detection

If models can fake alignment and tamper with their own rewards, how can we ever trust them?

Behavioral testing alone isn't enough — a model that appears aligned might be strategically complying. We need to look inside the model.

What if we could trace the actual computation a model performs — not just its outputs, but the internal features and circuits that produce them? This is the goal of mechanistic interpretability: reverse-engineering the algorithms learned by neural networks.

Mechanistic interpretability: seeing inside the black box

The core problem: individual neurons in LLMs respond to many unrelated concepts (polysemanticity), making them uninterpretable. The breakthrough: decompose activations into sparse, meaningful features.

A monosemantic feature responds to exactly one concept (e.g., "Golden Gate Bridge" or "deception"). Sparse autoencoders (SAEs) can decompose polysemantic neurons into monosemantic features — giving us interpretable building blocks for understanding what a model represents internally (Bricken et al., 2023).

Year Advance What we could see
2023 Sparse Autoencoders (SAEs) on toy models Individual features in small networks
2024 Scaling Monosemanticity 70% interpretable features in Claude 3 Sonnet
2025 Circuit Tracing Causal graphs showing how features interact to produce outputs

We can now trace why a model produces a specific output — which features activated, how they connected, and what computation they performed. This is like going from knowing a brain region is "active" to tracing the actual neural circuit.

Circuit tracing: attribution graphs

Circuit tracing (Lindsey et al., 2025) introduced Cross-Layer Transcoders (CLTs) — a new architecture that creates an interpretable replacement model, producing attribution graphs.

Attribution graph

Neuronpedia hosts interactive attribution graph exploration for open-weight models. You can trace how a model arrives at specific outputs.

Copyright: the $1.5 billion question

Bartz v. Anthropic (August 2025): Judge ruled that training on legally acquired books is fair use ("transformative"), but training on pirated books is not. Anthropic settled for $1.5 billion — $3,000 per each of ~500,000 pirated works. Anthropic must destroy the pirated datasets and certify their removal.

Case Status (as of March, 2026) Key issue
NYT v. OpenAI In discovery; OpenAI ordered to produce 20M chat logs Verbatim reproduction of articles
Bartz v. Anthropic Settled ($1.5B); fairness hearing April 2026 Piracy vs. legal acquisition
Thomson Reuters v. ROSS Fair use denied (Feb 2025); on appeal (3rd Circuit, briefs filed) Competitor trained on copyrighted headnotes
Getty v. Stability AI UK claim failed (Nov 2025); US trial set Jan 2028 Image model trained on copyrighted photos

77 active US copyright lawsuits against AI companies as of February 2026 (112 worldwide). Three fair use rulings so far (2 for, 1 against). No definitive appellate ruling yet.

AI and employment: what the data actually say

"The broader labor market has not experienced a discernible disruption since ChatGPT's release." Fewer than 10% of US firms use AI regularly as of mid-2025. (Yale Budget Lab, 2025)

Harvard Business Review found that companies are laying off workers based on AI's anticipated future performance, not current displacement — a forward-looking disruption pattern unlike prior automation waves (HBR, January 2026).

The regulatory divergence

The EU and US have taken opposite approaches to AI regulation.

EU AI Act — risk-based framework, first provisions active since February 2, 2025:

  • Banned: subliminal manipulation, social scoring, real-time biometric surveillance, emotion recognition in workplaces/schools
  • Fines: up to €35M or 7% of global revenue
  • Status: Rules are live but no enforcement actions yet (as of Feb 2026). Finland became the first active national enforcer (Jan 2026). Full high-risk compliance required by August 2026.

Trump administration (January 2025–present):

  • Day 1: Revoked Biden's October 2023 AI safety executive order by signing an EO "Removing Barriers to American Leadership in AI"
  • December 2025: Signed EO seeking federal preemption of state AI laws — states with "onerous AI laws" lose federal broadband funding
  • No comprehensive federal AI legislation has passed Congress

Deepfakes and elections: the 2024 test

Key incidents:

Harvard's Ash Center concluded it was "the apocalypse that wasn't." The News Literacy Project found cheap fakes (non-AI manipulations) were used 7× more often than genuine AI-generated content. The feared "AI disinformation tsunami" didn't fully materialize — but the infrastructure for it now exists.

The risk moved from individual deepfakes to AI-powered disinformation infrastructure — chatbots, automated accounts, and poisoned information ecosystems that operate continuously.

The open-weight debate

Argument Details
Democratization Open weights let startups, universities, and developing nations build on frontier models without API costs (Chatham House, 2024)
Transparency Researchers can audit model internals, reproduce results, and find vulnerabilities before attackers do
Power decentralization Prevents a handful of companies from becoming sole gatekeepers of a transformative technology (Carnegie, 2024)
Concern Evidence
Safety stripping Safety fine-tuning can be removed from open-weight models with modest compute; once released, weights cannot be recalled (Casper et al., 2025)
Weapons knowledge Current LLMs don't yet increase bioweapons risk (RAND, 2024), but future models may cross that threshold
Frontier gap closing Open-weight models now lag proprietary ones by only 6–12 months (UK AISI, 2025)

Is there a capability threshold above which open release becomes irresponsible? What would it mean to release a superintelligent system — with potentially unsafe or unverifiable behavior — to anyone who can download it?

The existential risk debate

Position Notable voices
High concern Geoffrey Hinton (Turing Award; Nobel Prize in Physics, 2024), Yoshua Bengio (Turing Award)
Skeptical Yann LeCun (Turing Award), Andrew Ng

Bengio, Hinton et al. (2024) called for companies to spend one-third of budgets on safety. Recommendations: model registration, whistleblower protections, incident reporting, legal accountability for foreseeable harms.

Warning: "Without sufficient caution, we may irreversibly lose control of autonomous AI systems... culminating in a large-scale loss of life."

A survey of AI researchers (Grace et al., 2025) found bimodal estimates of existential catastrophe probability — experts either largely dismiss the risk or take it very seriously. There is no convergence. Three Turing Award winners cannot agree. Neither can the field.

What you've learned this term

Week What we studied Key insight
1 ELIZA, pattern matching Simple rules can create the illusion of understanding
2–3 Tokenization, embeddings (LSA, LDA) Language has mathematical structure
4 Word2Vec, contextual embeddings Meaning depends on context
5 Transformers, attention, RAG Attention is all you need (sometimes)
6 BERT, language and thought Do models that predict language understand it?
7 Diffusion models Generation isn't just autoregressive
9 Reasoning, agents, ethics The technology works. Now what?

What's next for LLMs? The scaling wall

  1. Running out of data — Most high-quality human text has already been used. Training on AI-generated data causes model collapse: tails of the distribution vanish irreversibly (Shumailov et al., 2024)
  2. Energy consumption — Data centers consumed ~415 TWh in 2024 (~1.5% of global electricity); projected to reach 945 TWh by 2030 (~3%; IEA, 2025)
  3. Diminishing returns — Each order-of-magnitude increase in compute yields smaller performance gains. The era of "just make it bigger" may be ending
  • LoRA (Hu et al., 2021): Fine-tune with 10,000× fewer parameters by injecting low-rank adapters
  • Mixture of Experts (MoE): Activate only a fraction of parameters per token (see Lecture 25)
  • Distillation: Train small models to mimic large ones (see Lecture 19)
  • Neural ODEs (Chen et al., 2018), liquid networks (Hasani et al., 2021), state space models (Gu & Dao, 2023) — non-transformer architectures that can learn more efficiently from less data
  • Models that learn to modify their own weights and architecture during inference (see next slide)

What's next for LLMs? Continual learning

Transformer-based LLMs are static after training completes. They cannot learn from new experiences, update their knowledge, or adapt to new domains without retraining — a process that costs millions of dollars and takes weeks or months. When fine-tuned on new data, they suffer catastrophic forgetting: previously learned capabilities degrade or vanish entirely (Shi et al., 2025).

Nested Learning (Behrouz et al., 2025, NeurIPS) reimagines model architecture as a set of nested optimization problems, each with its own "context flow." Key insights:

  • Gradient-based optimizers (Adam, SGD) are actually associative memory modules that compress gradient information
  • A self-modifying learning module learns its own update algorithm
  • A continuum memory system generalizes traditional long/short-term memory

Their proof-of-concept architecture (Hope) outperforms standard transformers on language modeling while supporting continual learning without catastrophic forgetting.

What's next for LLMs? The local revolution

Trend What's happening
Local models Tools like Ollama and LM Studio make running LLMs on personal hardware mainstream — private, free, customizable
Privacy concerns AI companies routinely use chat interactions for training; local models keep data on-device
Hardware improvement Apple M-series, NVIDIA RTX, AMD NPUs — consumer hardware can now run 7B–70B parameter models
Cost Cloud API costs add up; local inference is free after hardware purchase

What's next for LLMs? Multimodal models

Users increasingly expect models to handle text + images + audio + video natively. Multimodal is quickly becoming the default, not the exception.

Model Capability Limitation
Gemini 2.5 Pro 2M-token context; up to 6 hours of video; 84.8% on VideoMME (Google, 2025) Closed-source; API-only
Apollo Open family (3B–7B); Apollo-3B outperforms most 7B models on video tasks (Zohar et al., CVPR 2025) Limited to shorter clips
Tarsier2 Outperforms GPT-4o on video description benchmarks Narrow task focus

Long-form video remains hard: token redundancy inflates compute, context windows fragment temporal coherence, and cross-modal reasoning across hours of content is still unreliable (Zhou et al., 2025, CVPR). Expect rapid progress over the next 1–2 years as architectures mature.

The question that matters

Every design decision embeds values. Every system reflects choices. Every deployment affects real people.

You are graduating into a world where:

  • AI agents can write code, browse the web, and use your computer
  • Models can strategically deceive their own trainers
  • 77+ US copyright lawsuits (112 worldwide) are reshaping intellectual property law
  • Companies are laying off workers based on AI's anticipated future capabilities
  • No country has figured out how to regulate this technology

You will be the generation that shapes how this technology is used. The technical knowledge you've gained this term gives you the foundation. The ethical questions don't have answer keys.

Further reading

Greenblatt et al. (2024, arXiv) "Alignment Faking in Large Language Models" — Models that strategically pretend to be aligned.

Anthropic (2024) "Reward Tampering" — Emergent deceptive behaviors from sycophancy training.

Anthropic (2025) "Circuit Tracing" — Seeing inside the black box with attribution graphs.

International AI Safety Report (2026) — Global scientific consensus on AI safety.

Bender et al. (2021, FAccT) "On the Dangers of Stochastic Parrots" — Environmental and social costs of large language models.

Harvard Business Review (2026) "Companies Are Laying Off Workers Because of AI's Potential, Not Its Performance."

Questions?

📧 Email
💬 Discord

Final week: project presentations and course wrap-up!