Enhance Figure 1 with systems-focused comments and fix LaTeX itemize errors

## Figure 1 Enhancements

Added informative comments to TinyTorch code example (Figure 1c) to highlight
systems insights students gain from implementation:

**Linear layer:**
- Memory calculation: `out × in_features × 4B`
- Computational complexity: `O(batch × in × out) FLOPs`

**Adam optimizer:**
- Memory insight: "Why 2× memory vs SGD?" (momentum + variance buffers)
- Algorithm clarity: "Exponential moving avg" for momentum/variance updates
- Optimization detail: "Per-parameter adaptive lr" for update rule

These comments make the contrast with PyTorch/TensorFlow (Figures 1a-b) more
explicit: black-box API usage vs. understanding memory costs, computational
complexity, and algorithmic trade-offs.

## LaTeX Fixes

Fixed 4 itemize environment errors from empirical validation roadmap section:
- Added blank lines before all \begin{itemize} environments
- Affected sections: Quantitative Success Criteria (line 600), Phase 1-3 (lines 1036, 1045, 1054)

Paper now compiles cleanly: 24 pages, 389KB PDF, no LaTeX errors.

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Vijay Janapa Reddi
2025-11-18 19:06:55 -05:00
parent 313e23e6fb
commit 272ffd6409
7 changed files with 606 additions and 289 deletions

View File

@@ -0,0 +1,453 @@
# Comprehensive Module Review: Educational Framework Analysis
**Date**: [Current]
**Reviewer**: Expert PyTorch Developer + Educational Materials Specialist
**Scope**: All 20 modules (01-20) + archived modules
---
## Executive Summary
Overall, the TinyTorch framework demonstrates **strong progressive building** and **educational clarity**. However, several **anti-patterns** from AI code generation ("reward hacking") have been identified that undermine the educational experience. This review identifies issues and provides actionable fixes.
### Key Findings
**Strengths**:
- Clear progressive building from Module 01 → 20
- Explicit imports in most modules (no star imports)
- Good dependency documentation in recent modules (13, 16, 18)
- Consistent module structure and organization
⚠️ **Issues Found**:
1. **`import_previous_module` helper function** - Used in Modules 02, 04, 06 (problematic pattern)
2. **Try/except fallbacks** - Some modules silently handle missing dependencies
3. **Inconsistent error handling** - Some modules raise educational errors, others fail silently
4. **Module 20 capstone** - Optional imports handled with None assignments (should be explicit)
---
## Detailed Module-by-Module Review
### ✅ Module 01: Tensor (Foundation)
**Status**: ✅ EXCELLENT
- **Imports**: Clean, no dependencies (foundation module)
- **Progressive Building**: N/A (foundation)
- **Educational Clarity**: Excellent documentation
- **Issues**: None
**Pattern**:
```python
import numpy as np
# No dependencies - this is the foundation
```
---
### ⚠️ Module 02: Activations
**Status**: ⚠️ NEEDS FIX
- **Imports**: Uses `import_previous_module` helper function
- **Progressive Building**: Should import Tensor directly
- **Educational Clarity**: Good, but helper function obscures dependencies
- **Issues**:
- `import_previous_module()` function uses `sys.path.append()` (line 828)
- Used in test code, but pattern is problematic
**Current Pattern** (PROBLEMATIC):
```python
def import_previous_module(module_name: str, component_name: str):
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', module_name))
module = __import__(f"{module_name.split('_')[1]}_dev")
return getattr(module, component_name)
```
**Should Be**:
```python
from tinytorch.core.tensor import Tensor
```
**Recommendation**: Remove `import_previous_module` helper. Use direct imports from `tinytorch` package.
---
### ✅ Module 03: Layers
**Status**: ✅ GOOD (with minor note)
- **Imports**: Direct imports from `tinytorch.core.tensor` and `tinytorch.core.activations`
- **Progressive Building**: Clear dependencies
- **Educational Clarity**: Excellent
- **Issues**:
- Commented-out `import_previous_module` function (line 750) - should be removed entirely
- Uses `import_previous_module` in test code (line 781) - should use direct imports
**Current Pattern**:
```python
from tinytorch.core.tensor import Tensor
from tinytorch.core.activations import ReLU, Sigmoid
```
**Recommendation**: Remove commented-out `import_previous_module` code and update test code to use direct imports.
---
### ⚠️ Module 04: Losses
**Status**: ⚠️ NEEDS FIX
- **Imports**: Uses `import_previous_module` helper function
- **Progressive Building**: Should import Tensor, Linear, ReLU directly
- **Educational Clarity**: Good documentation, but helper obscures dependencies
- **Issues**:
- `import_previous_module()` function defined (line 84)
- Uses `sys.path.append()` pattern
- However, ALSO has direct imports (lines 92-94) - inconsistent!
**Current Pattern** (INCONSISTENT):
```python
def import_previous_module(module_name: str, component_name: str):
# ... sys.path.append pattern ...
# Import from tinytorch package
from tinytorch.core.tensor import Tensor
from tinytorch.core.layers import Linear
from tinytorch.core.activations import ReLU
```
**Recommendation**: Remove `import_previous_module` function entirely. Keep only direct imports.
---
### ✅ Module 05: Autograd
**Status**: ✅ GOOD (with acceptable exception)
- **Imports**: Direct imports from tinytorch package
- **Progressive Building**: Clear dependencies
- **Educational Clarity**: Excellent
- **Issues**:
- Try/except ImportError that silently passes (line 1149) - **ACCEPTABLE** for optional dependencies during development
- This is fine because it's handling optional monkey-patching of loss functions
**Current Pattern** (ACCEPTABLE):
```python
try:
# Monkey-patch loss functions for autograd tracking
BinaryCrossEntropyLoss.forward = tracked_bce_forward
# ...
except ImportError:
# Activations/losses not yet available (happens during module development)
pass
```
**Recommendation**: Keep as-is. This is acceptable for optional dependencies during development.
---
### ⚠️ Module 06: Optimizers
**Status**: ⚠️ NEEDS FIX
- **Imports**: Direct imports in main code, but uses `import_previous_module` in test code
- **Progressive Building**: Clear in main code
- **Educational Clarity**: Good
- **Issues**:
- Uses `import_previous_module` in test code (lines 1261-1264)
- Commented-out function definition (line 1228)
**Current Pattern** (TEST CODE ISSUE):
```python
# In test code:
Tensor = import_previous_module('01_tensor', 'Tensor')
Linear = import_previous_module('03_layers', 'Linear')
ReLU = import_previous_module('02_activations', 'ReLU')
MSELoss = import_previous_module('04_losses', 'MSELoss')
```
**Recommendation**: Update test code to use direct imports:
```python
from tinytorch.core.tensor import Tensor
from tinytorch.core.layers import Linear
from tinytorch.core.activations import ReLU
from tinytorch.core.losses import MSELoss
```
---
### ✅ Module 07: Training
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear dependencies
- **Educational Clarity**: Excellent
- **Issues**: None (commented-out `import_previous_module` should be removed)
**Pattern**:
```python
from tinytorch.core.tensor import Tensor
from tinytorch.core.layers import Linear
from tinytorch.core.losses import MSELoss, CrossEntropyLoss
from tinytorch.core.optimizers import SGD, AdamW
```
---
### ✅ Module 08: DataLoader
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear (only needs Tensor)
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 09: Spatial
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear (only needs Tensor)
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 10: Tokenization
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear (only needs Tensor)
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 11: Embeddings
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear (only needs Tensor)
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 12: Attention
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear dependencies (Tensor, Linear)
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 13: Transformers
**Status**: ✅ EXCELLENT (RECENTLY FIXED)
- **Imports**: Direct imports with educational error messages
- **Progressive Building**: Excellent dependency documentation
- **Educational Clarity**: Excellent
- **Issues**: None (fixed in recent hot fixes)
**Pattern** (EXEMPLARY):
```python
try:
from tinytorch.core.tensor import Tensor # Module 01: Foundation
except ImportError as e:
raise ImportError(
"❌ Module 13 (Transformers) requires Module 01 (Tensor) to be completed first.\n"
" Please complete Module 01 first, then run 'tito module complete 01'.\n"
" Original error: " + str(e)
) from e
```
---
### ✅ Module 14: Profiling
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear dependencies
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 15: Quantization
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear dependencies
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 16: Compression
**Status**: ✅ EXCELLENT (RECENTLY FIXED)
- **Imports**: Direct imports with educational error messages
- **Progressive Building**: Excellent dependency documentation
- **Educational Clarity**: Excellent
- **Issues**: None (fixed in recent hot fixes)
- **Note**: Sequential class defined locally as testing utility (correct)
---
### ✅ Module 17: Memoization
**Status**: ✅ EXCELLENT
- **Imports**: Direct imports, clean
- **Progressive Building**: Clear dependencies
- **Educational Clarity**: Excellent
- **Issues**: None
---
### ✅ Module 18: Acceleration
**Status**: ✅ EXCELLENT (RECENTLY FIXED)
- **Imports**: Direct imports with educational error messages
- **Progressive Building**: Excellent dependency documentation
- **Educational Clarity**: Excellent
- **Issues**: None (fixed in recent hot fixes)
---
### ⚠️ Module 19: Benchmarking
**Status**: ⚠️ ACCEPTABLE (with note)
- **Imports**: Direct imports + optional external dependencies
- **Progressive Building**: Clear
- **Educational Clarity**: Good
- **Issues**:
- Try/except for optional external dependencies (pandas, matplotlib, psutil) - **ACCEPTABLE**
- These are external libraries, not TinyTorch modules
- Creates fallback classes when pandas not available (line 177) - acceptable for optional dependency
**Current Pattern** (ACCEPTABLE):
```python
try:
import pandas as pd
PANDAS_AVAILABLE = True
except ImportError:
PANDAS_AVAILABLE = False
# Create a simple DataFrame-like class for when pandas is not available
class pd:
class DataFrame:
# ... minimal fallback
```
**Recommendation**: Keep as-is. This is acceptable for optional external dependencies.
---
### ⚠️ Module 20: Capstone
**Status**: ⚠️ NEEDS IMPROVEMENT
- **Imports**: Direct imports + try/except for optional features
- **Progressive Building**: Clear
- **Educational Clarity**: Good, but could be more explicit
- **Issues**:
- Try/except that sets things to None (lines 254-266)
- Should raise educational errors instead of silently setting to None
**Current Pattern** (COULD BE BETTER):
```python
try:
from tinytorch.optimization.quantization import QuantizedLinear
except ImportError:
QuantizedLinear = None # Not available
try:
from tinytorch.optimization.compression import magnitude_prune, structured_prune
except ImportError:
magnitude_prune = None
structured_prune = None
```
**Recommendation**: Either:
1. Make these required dependencies (raise educational errors)
2. Or document clearly that these are optional features
---
## Critical Issues Summary
### 🔴 HIGH PRIORITY
1. **Remove `import_previous_module` helper function**
- **Modules**: 02, 04, 06
- **Impact**: Obscures dependencies, uses non-portable sys.path manipulation
- **Fix**: Replace with direct imports from `tinytorch` package
2. **Update test code to use direct imports**
- **Modules**: 02, 03, 06
- **Impact**: Test code should follow same patterns as main code
- **Fix**: Replace `import_previous_module` calls with direct imports
### 🟡 MEDIUM PRIORITY
3. **Module 20: Make optional dependencies explicit**
- **Impact**: Students might not understand why features are None
- **Fix**: Either make required or document clearly as optional
4. **Remove commented-out code**
- **Modules**: 01, 03, 06, 07
- **Impact**: Clutters codebase
- **Fix**: Remove commented-out `import_previous_module` functions
---
## Recommended Fixes
### Fix 1: Remove `import_previous_module` from Module 02
**File**: `modules/02_activations/activations_dev.py`
- Remove function definition (line 828)
- Update test code to use direct imports
### Fix 2: Remove `import_previous_module` from Module 04
**File**: `modules/04_losses/losses_dev.py`
- Remove function definition (line 84)
- Keep only direct imports (already present)
### Fix 3: Update Module 06 test code
**File**: `modules/06_optimizers/optimizers_dev.py`
- Remove commented-out function (line 1228)
- Update test code (lines 1261-1264) to use direct imports
### Fix 4: Improve Module 20 optional dependencies
**File**: `modules/20_capstone/capstone.py`
- Either make dependencies required (raise educational errors)
- Or document clearly as optional features with clear messaging
### Fix 5: Clean up commented code
**Files**: Multiple modules
- Remove all commented-out `import_previous_module` functions
---
## Educational Principles Validation
### ✅ Progressive Building
- **Status**: EXCELLENT
- **Evidence**: Clear dependency chains, modules build on each other logically
- **Note**: Some modules use helper functions that obscure this
### ✅ Explicit Imports
- **Status**: EXCELLENT (after fixes)
- **Evidence**: No star imports found, direct imports used throughout
- **Note**: Helper functions need to be removed
### ✅ Educational Clarity
- **Status**: EXCELLENT
- **Evidence**: Good documentation, clear learning objectives
- **Note**: Recent modules (13, 16, 18) have exemplary dependency documentation
### ✅ No Reward Hacking
- **Status**: GOOD (after recent fixes)
- **Evidence**: Recent fixes removed duplicate classes, fallbacks, hardcoded paths
- **Note**: `import_previous_module` pattern is a form of reward hacking
---
## Conclusion
The TinyTorch framework is **well-structured and educational**, with recent fixes addressing major issues. The remaining issues are primarily:
1. **Legacy helper functions** (`import_previous_module`) that should be removed
2. **Test code** that should follow same patterns as main code
3. **Optional dependencies** that should be more explicitly documented
**Overall Grade**: A- (Excellent, with minor improvements needed)
**Priority Actions**:
1. Remove `import_previous_module` from Modules 02, 04
2. Update test code in Modules 02, 03, 06
3. Improve Module 20 optional dependency handling
4. Clean up commented code
---
**Next Steps**: Implement fixes for high-priority issues.

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
\begin{thebibliography}{37}
\begin{thebibliography}{39}
\providecommand{\natexlab}[1]{#1}
\providecommand{\url}[1]{\texttt{#1}}
\expandafter\ifx\csname urlstyle\endcsname\relax
@@ -21,173 +21,11 @@ Colby~R. Banbury, Vijay~Janapa Reddi, Max Lam, William Fu, Amin Fazel, Jeremy
\newblock \emph{arXiv preprint arXiv:2003.04821}.
\newblock URL \url{http://arxiv.org/abs/2003.04821v4}.
\bibitem[Burstein et~al.(1992)Burstein, Henry, Collison, Marczak, Sligar,
Watson, Marquez, Abbasalizad-Farhangi, Abbasi, Abd-Allah, Abdoli, Abdollahi,
Abdollahpour, Abdulkader, Abrigo, Acharya, Adebayo, Adekanmbi, Adham,
Afshari, Aghaali, Ahmadi, Ahmadi, Ahmadpour, Ahmed, Akal, Akinyemi, Alahdab,
Alam, Alamene, Alene, Alijanzadeh, Alinia, Alipour, Aljunid, Almalki,
Al-Mekhlafi, Altirkawi, Alvis-Guzman, Amegah, Amini, Amit, Anbari, Androudi,
Anjomshoa, Ansari, Antonio, Arabloo, Arefi, Aremu, Armoon, Arora, Artaman,
Asadi, Asadi-Aliabadi, Ashraf-Ganjouei, Assadi, Ataeinia, Atre, Quintanilla,
Ayanore, Azari, Babaee, Babazadeh, Badawi, Bagheri, Bagherzadeh, Baheiraei,
Balouchi, Barac, Bassat, Baune, Bayati, Bedi, Beghi, Behzadifar, Behzadifar,
Belay, Bell, Bell, Berbada, Bernstein, Bhattacharjee, Bhattarai, Bhutta,
Bijani, Bohlouli, Breitborde, Britton, Browne, Nagaraja, Busse, Butt, Car,
Cárdenas, Castañeda-Orjuela, Cerin, Chanie, Chatterjee, Chu, Cooper, Costa,
Dalal, Dandona, Dandona, Daoud, Daryani, Das~Gupta, Davis, Davis~Weaver,
Davitoiu, De~Neve, Demeke, Demoz, Deribe, Desai, Deshpande, Desyibelew, Dey,
Dharmaratne, Dhimal, Diaz, Doshmangir, Duraes, Dwyer-Lindgren, Earl,
Ebrahimi, Ebrahimpour, Effiong, Eftekhari, Ehsani-Chimeh, El~Sayed,
El~Sayed~Zaki, El~Tantawi, El-Khatib, Emamian, Enany, Eskandarieh, Eyawo,
Ezalarab, Faramarzi, Fareed, Faridnia, Faro, Fazaeli, Fazlzadeh, Fentahun,
Fereshtehnejad, Fernandes, Filip, Fischer, Foigt, Foroutan, Francis,
Fukumoto, Fullman, Gallus, Gebre, Gebrehiwot, Gebremeskel, Gessner, Geta,
Gething, Ghadimi, Ghadiri, Ghajarzadeh, Ghashghaee, Gill, Gill, Golding,
Gomes, Gona, Gopalani, Gorini, Goulart, Graetz, Greaves, Green, Guo,
Haj-Mirzaian, Haj-Mirzaian, Hall, Hamidi, Haririan, Haro, Hasankhani,
Hasanpoor, Hasanzadeh, Hassankhani, Hassen, Hegazy, Hendrie, Heydarpour,
Hird, Hoang, Hollerich, Rad, Hoseini-Ghahfarokhi, Hossain, Hosseini,
Hosseinzadeh, Hostiuc, Hostiuc, Househ, Hsairi, Ilesanmi, Imani-Nasab, Iqbal,
Irvani, Islam, Islam, Jürisson, Balalami, Jalali, Javidnia, Jayatilleke,
Jenabi, Ji, Jobanputra, Johnson, Jonas, Shushtari, Jozwiak, Kabir, Kahsay,
Kalani, Kalhor, Karami, Karki, Kasaeian, Kassebaum, Keiyoro, Kemp, Khabiri,
Khader, Khafaie, Khan, Khan, Khan, Khang, Khatab, Khater, Khater, Khatony,
Khazaei, Khazaei, Khazaei-Pool, Khubchandani, Kianipour, Kim, Kimokoti,
Kinyoki, Kisa, Kisa, Kolola, Kosen, Koul, Koyanagi, Kraemer, Krishan, Krohn,
Kugbey, Kumar, Kumar, Kumar, Kuupiel, Lacey, Lad, Lami, Larsson, Lee, Leili,
Levine, Li, Lim, Listl, Longbottom, Lopez, Lorkowski, Magdeldin, Abd
El~Razek, Abd El~Razek, Majeed, Maleki, Malekzadeh, Malta, Mamun, Manafi,
Manda, Mansourian, Martins-Melo, Masaka, Massenburg, Maulik, Mayala, Mazidi,
McKee, Mehrotra, Mehta, Meles, Mendoza, Menezes, Meretoja, Meretoja,
Mestrovic, Miller, Miller-Petrie, Mills, Milne, Mini, Mir, Mirjalali,
Mirrakhimov, Mohamadi, Mohammad, Darwesh, Mezerji, Mohammed, Mohammed,
Mokdad, Molokhia, Monasta, Moodley, Moosazadeh, Moradi, Moradi, Moradi,
Moradi-Lakeh, Moradinazar, Moraga, Morawska, Mosapour, Mousavi, Mueller,
Muluneh, Mustafa, Nabavizadeh, Naderi, Nagarajan, Nahvijou, Najafi, Nangia,
Ndwandwe, Neamati, Negoi, Negoi, Ngunjiri, Thi~Nguyen, Nguyen, Nguyen,
Nielsen, Ningrum, Nirayo, Nixon, Nnaji, Nojomi, Noroozi, Nosratnejad,
Noubiap, Motlagh, Ofori-Asenso, Ogbo, Oladimeji, Olagunju, Olfatifar, Olum,
Olusanya, Oluwasanu, Onwujekwe, Oren, Ortega-Altamirano, Ortiz, Osarenotor,
Osei, Osgood-Zimmerman, Otstavnov, Owolabi, ~, Pagheh, Pakhale, Panda-Jonas,
Pandey, Park, Parsian, Pashaei, Patel, Pepito, Pereira, Perkins, Pickering,
Pilgrim, Pirestani, Piroozi, Pirsaheb, Plana-Ripoll, Pourjafar, Puri,
Qorbani, Quintana, Rabiee, Rabiee, Radfar, Rafiei, Rahim, Rahimi,
Rahimi-Movaghar, Rahimzadeh, Rajati, Raju, Ramezankhani, Ranabhat, Rasella,
Rashedi, Rawal, Reiner, Renzaho, Rezaei, Rezapour, Riahi, Ribeiro, Roever,
Roro, Roser, Roshandel, Roshani, Rostami, Rubagotti, Rubino, Sabour, Sadat,
Sadeghi, Saeedi, Safari, Safari-Faramani, Safdarian, Sahebkar, Salahshoor,
Salam, Salamati, Salehi, Zahabi, Salimi, Salimzadeh, Salomon, Sambala, Samy,
Santric~Milicevic, Jose, Saraswathy, Sarmiento-Suárez, Sartorius, Sathian,
Saxena, Sbarra, Schaeffer, Schwebel, Sepanlou, Seyedmousavi, Shaahmadi,
Shaikh, Shams-Beyranvand, Shamshirian, Shamsizadeh, Sharafi, Sharif,
Sharif-Alhoseini, Sharifi, Sharma, Sharma, Sheikh, Shields, Shigematsu,
Shiri, Shiue, Shuval, Siddiqi, Silva, Singh, Sinha, Sisay, Sisay, Sliwa,
Smith, Somayaji, Soofi, Soriano, Sreeramareddy, Sudaryanto, Sufiyan, Sykes,
Sylaja, Tabarés-Seisdedos, Tabb, Tabuchi, Taveira, Temsah, Terkawi, Tessema,
Thankappan, Thirunavukkarasu, To, Tovani-Palone, Tran, Tran, Ullah, Usman,
Uthman, Vahedian-Azimi, Valdez, van Boven, Vasankari, Vasseghian, Veisani,
Venketasubramanian, Violante, Vladimirov, Vlassov, Vos, Vu, Vujcic, Waheed,
Wakefield, Wang, Wang, Wang, Ward, Weintraub, Weldegwergs, Weldesamuel,
Westerman, Wiysonge, Wondafrash, Woyczynski, Wu, Xu, Yadegar, Yamada,
Yazdi-Feyzabadi, Yilgwan, Yip, Yonemoto, Lebni, Younis, Yousefifard, Yousof,
Yu, Yusefzadeh, Zabeh, Moghadam, Bin~Zaman, Zamani, Zandian, Zangeneh, Zerfu,
Zhang, Ziapour, Zodpey, Murray, and Hay]{perkins1992transfer}
R~Burstein, NJ~Henry, ML~Collison, LB~Marczak, A~Sligar, S~Watson, N~Marquez,
M~Abbasalizad-Farhangi, M~Abbasi, F~Abd-Allah, A~Abdoli, M~Abdollahi,
I~Abdollahpour, RS~Abdulkader, MRM Abrigo, D~Acharya, OM~Adebayo,
V~Adekanmbi, D~Adham, M~Afshari, M~Aghaali, K~Ahmadi, M~Ahmadi, E~Ahmadpour,
R~Ahmed, CG~Akal, JO~Akinyemi, F~Alahdab, N~Alam, GM~Alamene, KA~Alene,
M~Alijanzadeh, C~Alinia, V~Alipour, SM~Aljunid, MJ~Almalki, HM~Al-Mekhlafi,
K~Altirkawi, N~Alvis-Guzman, AK~Amegah, S~Amini, AML Amit, Z~Anbari,
S~Androudi, M~Anjomshoa, F~Ansari, CAT Antonio, J~Arabloo, Z~Arefi, O~Aremu,
B~Armoon, A~Arora, A~Artaman, A~Asadi, M~Asadi-Aliabadi, A~Ashraf-Ganjouei,
R~Assadi, B~Ataeinia, SR~Atre, BPA Quintanilla, MA~Ayanore, S~Azari,
E~Babaee, A~Babazadeh, A~Badawi, S~Bagheri, M~Bagherzadeh, N~Baheiraei,
A~Balouchi, A~Barac, Q~Bassat, BT~Baune, M~Bayati, N~Bedi, E~Beghi,
M~Behzadifar, M~Behzadifar, YB~Belay, B~Bell, ML~Bell, DA~Berbada,
RS~Bernstein, NV~Bhattacharjee, S~Bhattarai, ZA~Bhutta, A~Bijani, S~Bohlouli,
NJK Breitborde, G~Britton, AJ~Browne, SB~Nagaraja, R~Busse, ZA~Butt, J~Car,
R~Cárdenas, CA~Castañeda-Orjuela, E~Cerin, WF~Chanie, P~Chatterjee, DT~Chu,
C~Cooper, VM~Costa, K~Dalal, L~Dandona, R~Dandona, F~Daoud, A~Daryani,
R~Das~Gupta, I~Davis, N~Davis~Weaver, DV~Davitoiu, JW~De~Neve, FM~Demeke,
GT~Demoz, K~Deribe, R~Desai, A~Deshpande, HD~Desyibelew, S~Dey,
SD~Dharmaratne, M~Dhimal, D~Diaz, L~Doshmangir, AR~Duraes, L~Dwyer-Lindgren,
L~Earl, R~Ebrahimi, S~Ebrahimpour, A~Effiong, A~Eftekhari, E~Ehsani-Chimeh,
I~El~Sayed, M~El~Sayed~Zaki, M~El~Tantawi, Z~El-Khatib, MH~Emamian, S~Enany,
S~Eskandarieh, O~Eyawo, M~Ezalarab, M~Faramarzi, M~Fareed, R~Faridnia,
A~Faro, AA~Fazaeli, M~Fazlzadeh, N~Fentahun, SM~Fereshtehnejad, JC~Fernandes,
I~Filip, F~Fischer, NA~Foigt, M~Foroutan, JM~Francis, T~Fukumoto, N~Fullman,
S~Gallus, DG~Gebre, TT~Gebrehiwot, GG~Gebremeskel, BD~Gessner, B~Geta,
PW~Gething, R~Ghadimi, K~Ghadiri, M~Ghajarzadeh, A~Ghashghaee, PS~Gill,
TK~Gill, N~Golding, NGM Gomes, PN~Gona, SV~Gopalani, G~Gorini, BNG Goulart,
N~Graetz, F~Greaves, MS~Green, Y~Guo, A~Haj-Mirzaian, A~Haj-Mirzaian,
BJ~Hall, S~Hamidi, H~Haririan, JM~Haro, M~Hasankhani, E~Hasanpoor,
A~Hasanzadeh, H~Hassankhani, HY~Hassen, MI~Hegazy, D~Hendrie, F~Heydarpour,
TR~Hird, CL~Hoang, G~Hollerich, EH~Rad, M~Hoseini-Ghahfarokhi, N~Hossain,
M~Hosseini, M~Hosseinzadeh, M~Hostiuc, S~Hostiuc, M~Househ, M~Hsairi,
OS~Ilesanmi, MH~Imani-Nasab, U~Iqbal, SSN Irvani, N~Islam, SMS Islam,
M~Jürisson, NJ~Balalami, A~Jalali, J~Javidnia, AU~Jayatilleke, E~Jenabi,
JS~Ji, YB~Jobanputra, K~Johnson, JB~Jonas, ZJ~Shushtari, JJ~Jozwiak, A~Kabir,
A~Kahsay, H~Kalani, R~Kalhor, M~Karami, S~Karki, A~Kasaeian, NJ~Kassebaum,
PN~Keiyoro, GR~Kemp, R~Khabiri, YS~Khader, MA~Khafaie, EA~Khan, J~Khan,
MS~Khan, YH~Khang, K~Khatab, A~Khater, MM~Khater, A~Khatony, M~Khazaei,
S~Khazaei, M~Khazaei-Pool, J~Khubchandani, N~Kianipour, YJ~Kim, RW~Kimokoti,
DK~Kinyoki, A~Kisa, S~Kisa, T~Kolola, S~Kosen, PA~Koul, A~Koyanagi, MUG
Kraemer, K~Krishan, KJ~Krohn, N~Kugbey, GA~Kumar, M~Kumar, P~Kumar,
D~Kuupiel, B~Lacey, SD~Lad, FH~Lami, AO~Larsson, PH~Lee, M~Leili, AJ~Levine,
S~Li, LL~Lim, S~Listl, J~Longbottom, JCF Lopez, S~Lorkowski, S~Magdeldin,
HM~Abd El~Razek, MM~Abd El~Razek, A~Majeed, A~Maleki, R~Malekzadeh, DC~Malta,
AA~Mamun, N~Manafi, AL~Manda, M~Mansourian, FR~Martins-Melo, A~Masaka,
BB~Massenburg, PK~Maulik, BK~Mayala, M~Mazidi, M~McKee, R~Mehrotra, KM~Mehta,
GG~Meles, W~Mendoza, RG~Menezes, A~Meretoja, TJ~Meretoja, T~Mestrovic,
TR~Miller, MK~Miller-Petrie, EJ~Mills, GJ~Milne, GK~Mini, SM~Mir,
H~Mirjalali, EM~Mirrakhimov, E~Mohamadi, DK~Mohammad, AM~Darwesh, NMG
Mezerji, AS~Mohammed, S~Mohammed, AH~Mokdad, M~Molokhia, L~Monasta,
Y~Moodley, M~Moosazadeh, G~Moradi, M~Moradi, Y~Moradi, M~Moradi-Lakeh,
M~Moradinazar, P~Moraga, L~Morawska, A~Mosapour, SM~Mousavi, UO~Mueller,
AG~Muluneh, G~Mustafa, B~Nabavizadeh, M~Naderi, AJ~Nagarajan, A~Nahvijou,
F~Najafi, V~Nangia, DE~Ndwandwe, N~Neamati, I~Negoi, RI~Negoi, JW~Ngunjiri,
HL~Thi~Nguyen, LH~Nguyen, SH~Nguyen, KR~Nielsen, DNA Ningrum, YL~Nirayo,
MR~Nixon, CA~Nnaji, M~Nojomi, M~Noroozi, S~Nosratnejad, JJ~Noubiap,
SN~Motlagh, R~Ofori-Asenso, FA~Ogbo, KE~Oladimeji, AT~Olagunju, M~Olfatifar,
S~Olum, BO~Olusanya, MM~Oluwasanu, OE~Onwujekwe, E~Oren, DDV
Ortega-Altamirano, A~Ortiz, O~Osarenotor, FB~Osei, AE~Osgood-Zimmerman,
SS~Otstavnov, MO~Owolabi, A~M ~, P, AS~Pagheh, S~Pakhale, S~Panda-Jonas,
A~Pandey, EK~Park, H~Parsian, T~Pashaei, SK~Patel, VCF Pepito, A~Pereira,
S~Perkins, BV~Pickering, T~Pilgrim, M~Pirestani, B~Piroozi, M~Pirsaheb,
O~Plana-Ripoll, H~Pourjafar, P~Puri, M~Qorbani, H~Quintana, M~Rabiee,
N~Rabiee, A~Radfar, A~Rafiei, F~Rahim, Z~Rahimi, V~Rahimi-Movaghar,
S~Rahimzadeh, F~Rajati, SB~Raju, A~Ramezankhani, CL~Ranabhat, D~Rasella,
V~Rashedi, L~Rawal, Jr~Reiner, RC, AMN Renzaho, S~Rezaei, A~Rezapour,
SM~Riahi, AI~Ribeiro, L~Roever, EM~Roro, M~Roser, G~Roshandel, D~Roshani,
A~Rostami, E~Rubagotti, S~Rubino, S~Sabour, N~Sadat, E~Sadeghi, R~Saeedi,
Y~Safari, R~Safari-Faramani, M~Safdarian, A~Sahebkar, MR~Salahshoor, N~Salam,
P~Salamati, F~Salehi, SS~Zahabi, Y~Salimi, H~Salimzadeh, JA~Salomon,
EZ~Sambala, AM~Samy, MM~Santric~Milicevic, BPS Jose, SYI Saraswathy,
R~Sarmiento-Suárez, B~Sartorius, B~Sathian, S~Saxena, AN~Sbarra,
LE~Schaeffer, DC~Schwebel, SG~Sepanlou, S~Seyedmousavi, F~Shaahmadi,
MA~Shaikh, M~Shams-Beyranvand, A~Shamshirian, M~Shamsizadeh, K~Sharafi,
M~Sharif, M~Sharif-Alhoseini, H~Sharifi, J~Sharma, R~Sharma, A~Sheikh,
C~Shields, M~Shigematsu, R~Shiri, I~Shiue, K~Shuval, TJ~Siddiqi, JP~Silva,
JA~Singh, DN~Sinha, MM~Sisay, S~Sisay, K~Sliwa, DL~Smith, R~Somayaji,
M~Soofi, JB~Soriano, CT~Sreeramareddy, A~Sudaryanto, MB~Sufiyan, BL~Sykes,
PN~Sylaja, R~Tabarés-Seisdedos, KM~Tabb, T~Tabuchi, N~Taveira, MH~Temsah,
AS~Terkawi, ZT~Tessema, KR~Thankappan, S~Thirunavukkarasu, QG~To,
MR~Tovani-Palone, BX~Tran, KB~Tran, I~Ullah, MS~Usman, OA~Uthman,
A~Vahedian-Azimi, PR~Valdez, JFM van Boven, TJ~Vasankari, Y~Vasseghian,
Y~Veisani, N~Venketasubramanian, FS~Violante, SK~Vladimirov, V~Vlassov,
T~Vos, GT~Vu, IS~Vujcic, Y~Waheed, J~Wakefield, H~Wang, Y~Wang, YP~Wang,
JL~Ward, RG~Weintraub, KG~Weldegwergs, GT~Weldesamuel, R~Westerman,
CS~Wiysonge, DZ~Wondafrash, L~Woyczynski, AM~Wu, G~Xu, A~Yadegar, T~Yamada,
V~Yazdi-Feyzabadi, CS~Yilgwan, P~Yip, N~Yonemoto, JY~Lebni, MZ~Younis,
M~Yousefifard, HSA Yousof, C~Yu, H~Yusefzadeh, E~Zabeh, TZ~Moghadam,
S~Bin~Zaman, M~Zamani, H~Zandian, A~Zangeneh, TA~Zerfu, Y~Zhang, A~Ziapour,
S~Zodpey, CJL Murray, and SI~Hay.
\newblock Mapping 123 million neonatal, infant and child deaths between 2000
and 2017.
\newblock \emph{Nature}, 574\penalty0 (7778):\penalty0 353--358, 1992.
\newblock ISSN 0028-0836.
\newblock \doi{10.1038/s41586-019-1545-0}.
\bibitem[Bruner(1960)]{bruner1960process}
Jerome~S. Bruner.
\newblock \emph{The Process of Education}.
\newblock Harvard University Press, Cambridge, MA, 1960.
\newblock ISBN 978-0-674-71001-6.
\bibitem[Chen and Zheng(2022)]{chen2022dlsyscourse}
Tianqi Chen and Zico Zheng.
@@ -204,15 +42,6 @@ Allan Collins, John~Seely Brown, and Susan~E. Newman.
\newblock \doi{10.4324/9781315044408-14}.
\newblock URL \url{https://doi.org/10.4324/9781315044408-14}.
\bibitem[Frolli et~al.(1960)Frolli, Cerciello, Ciotola, Ricci, Esposito, and
Sica]{bruner1960process}
A~Frolli, F~Cerciello, S~Ciotola, MC~Ricci, C~Esposito, and LS~Sica.
\newblock Narrative approach and mentalization.
\newblock \emph{Behavioral sciences (Basel, Switzerland)}, 13\penalty0 (12),
1960.
\newblock ISSN 2076-328X.
\newblock \doi{10.3390/bs13120994}.
\bibitem[Heffernan()]{roberthalf2024talent}
Margaret Heffernan.
\newblock Earning half the minimum wage: new report reveals pressures on
@@ -310,6 +139,14 @@ Paulius Micikevicius, Sharan Narang, Jonah Alben, Gregory Diamos, Erich Elsen,
\newblock Mixed precision training.
\newblock URL \url{http://arxiv.org/abs/1710.03740v3}.
\bibitem[Paas(1992)]{paas1992training}
Fred G. W.~C. Paas.
\newblock Training strategies for attaining transfer of problem-solving skill
in statistics: A cognitive-load approach.
\newblock \emph{Journal of Educational Psychology}, 84\penalty0 (4):\penalty0
429--434, 1992.
\newblock \doi{10.1037/0022-0663.84.4.429}.
\bibitem[Patterson et~al.()Patterson, Gonzalez, Le, Liang, Munguia, Rothchild,
So, Texier, and Dean]{patterson2021carbon}
David Patterson, Joseph Gonzalez, Quoc Le, Chen Liang, Lluis-Miquel Munguia,
@@ -318,6 +155,11 @@ David Patterson, Joseph Gonzalez, Quoc Le, Chen Liang, Lluis-Miquel Munguia,
\newblock \emph{arXiv preprint arXiv:2104.10350}.
\newblock URL \url{http://arxiv.org/abs/2104.10350v3}.
\bibitem[Perkins and Salomon(1992)]{perkins1992transfer}
D.~N. Perkins and Gavriel Salomon.
\newblock Transfer of learning.
\newblock \emph{International Encyclopedia of Education}, 1992.
\bibitem[Rashidi et~al.()Rashidi, Sridharan, Srinivasan, and
Krishna]{chakkaravarthy2023astrasim}
Saeed Rashidi, Srinivas Sridharan, Sudarshan Srinivasan, and Tushar Krishna.
@@ -412,6 +254,12 @@ Keller~Executive Search.
\newblock URL
\url{https://www.kellerexecutivesearch.com/intelligence/ai-machine-learning-talent-gap-2025/}.
\bibitem[Sorva(2012)]{sorva2012visual}
Juha Sorva.
\newblock \emph{Visual program simulation in introductory programming
education}.
\newblock Doctoral dissertation, Aalto University, Espoo, Finland, 2012.
\bibitem[Strubell et~al.()Strubell, Ganesh, and McCallum]{strubell2019energy}
Emma Strubell, Ananya Ganesh, and Andrew McCallum.
\newblock Energy and policy considerations for deep learning in nlp.

View File

@@ -49,45 +49,45 @@ Warning--empty year in papert1980mindstorms
Warning--empty year in papert1980mindstorms
Warning--empty year in zhang2021dive
Warning--empty year in zhang2021dive
You've used 37 entries,
You've used 39 entries,
2773 wiz_defined-function locations,
874 strings with 23762 characters,
and the built_in function-call counts, 50306 in all, are:
= -- 3560
> -- 6924
< -- 25
+ -- 2316
- -- 2278
* -- 5403
:= -- 8608
add.period$ -- 165
call.type$ -- 37
change.case$ -- 869
chr.to.int$ -- 36
cite$ -- 120
duplicate$ -- 762
empty$ -- 1359
format.name$ -- 2329
if$ -- 9551
879 strings with 15131 characters,
and the built_in function-call counts, 22733 in all, are:
= -- 1917
> -- 1884
< -- 29
+ -- 638
- -- 598
* -- 2045
:= -- 3643
add.period$ -- 169
call.type$ -- 39
change.case$ -- 314
chr.to.int$ -- 38
cite$ -- 124
duplicate$ -- 796
empty$ -- 1410
format.name$ -- 653
if$ -- 4599
int.to.chr$ -- 2
int.to.str$ -- 1
missing$ -- 29
newline$ -- 242
num.names$ -- 150
pop$ -- 1821
missing$ -- 31
newline$ -- 250
num.names$ -- 158
pop$ -- 719
preamble$ -- 1
purify$ -- 833
purify$ -- 277
quote$ -- 0
skip$ -- 1205
skip$ -- 667
stack$ -- 0
substring$ -- 441
swap$ -- 90
substring$ -- 445
swap$ -- 92
text.length$ -- 7
text.prefix$ -- 0
top$ -- 0
type$ -- 392
type$ -- 409
warning$ -- 46
while$ -- 147
while$ -- 153
width$ -- 0
write$ -- 557
write$ -- 579
(There were 46 warnings)

View File

@@ -32,7 +32,7 @@
\BOOKMARK [2][-]{subsection.7.2}{\376\377\000L\000i\000m\000i\000t\000a\000t\000i\000o\000n\000s\000:\000\040\000U\000n\000d\000e\000r\000s\000t\000a\000n\000d\000i\000n\000g\000\040\000S\000c\000o\000p\000e}{section.7}% 32
\BOOKMARK [1][-]{section.8}{\376\377\000F\000u\000t\000u\000r\000e\000\040\000W\000o\000r\000k}{}% 33
\BOOKMARK [2][-]{subsection.8.1}{\376\377\000S\000y\000s\000t\000e\000m\000s\000\040\000E\000x\000t\000e\000n\000s\000i\000o\000n\000s\000:\000\040\000A\000n\000a\000l\000y\000t\000i\000c\000a\000l\000\040\000M\000o\000d\000e\000l\000s\000\040\000a\000n\000d\000\040\000S\000i\000m\000u\000l\000a\000t\000o\000r\000s}{section.8}% 34
\BOOKMARK [2][-]{subsection.8.2}{\376\377\000E\000m\000p\000i\000r\000i\000c\000a\000l\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n}{section.8}% 35
\BOOKMARK [2][-]{subsection.8.2}{\376\377\000E\000m\000p\000i\000r\000i\000c\000a\000l\000\040\000V\000a\000l\000i\000d\000a\000t\000i\000o\000n\000\040\000R\000o\000a\000d\000m\000a\000p}{section.8}% 35
\BOOKMARK [2][-]{subsection.8.3}{\376\377\000C\000u\000r\000r\000i\000c\000u\000l\000u\000m\000\040\000E\000x\000t\000e\000n\000s\000i\000o\000n\000s\000:\000\040\000F\000u\000n\000d\000a\000m\000e\000n\000t\000a\000l\000s\000\040\000v\000s\000.\000\040\000P\000r\000o\000d\000u\000c\000t\000i\000o\000n\000\040\000S\000c\000o\000p\000e}{section.8}% 36
\BOOKMARK [2][-]{subsection.8.4}{\376\377\000C\000o\000m\000m\000u\000n\000i\000t\000y\000\040\000B\000u\000i\000l\000d\000i\000n\000g\000\040\000a\000n\000d\000\040\000A\000d\000o\000p\000t\000i\000o\000n}{section.8}% 37
\BOOKMARK [1][-]{section.9}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 38

Binary file not shown.

View File

@@ -234,11 +234,13 @@ model.fit(dataloader, epochs=10)
class Linear:
def __init__(self, in_features,
out):
# Memory: out × in_features × 4B
self.weight = Tensor.randn(
out, in_features)
self.bias = Tensor.zeros(out)
def forward(self, x):
# O(batch × in × out) FLOPs
return (x @ self.weight.T +
self.bias)
@@ -249,6 +251,7 @@ class Adam:
self.lr = lr
# 2× optimizer state:
# momentum + variance
# Why 2× memory vs SGD?
self.m = [Tensor.zeros_like(p)
for p in params]
self.v = [Tensor.zeros_like(p)
@@ -257,10 +260,12 @@ class Adam:
def step(self):
for i, p in enumerate(
self.params):
# Exponential moving avg
self.m[i] = (0.9*self.m[i] +
0.1*p.grad)
self.v[i] = (0.999*self.v[i] +
0.001*p.grad**2)
# Per-parameter adaptive lr
p.data -= (self.lr *
self.m[i] /
(self.v[i].sqrt() + 1e-8))
@@ -591,6 +596,7 @@ Each milestone: (1) recreates actual breakthroughs using exclusively student cod
\noindent\textbf{Quantitative Success Criteria:}
To ensure reproducibility and clear learning objectives, each milestone defines explicit success thresholds balancing historical plausibility (recognizing pure-Python performance limits) with pedagogical validation (ensuring implementations are functionally correct, not just syntactically complete):
\begin{itemize}[leftmargin=*, itemsep=1pt, parsep=0pt]
\item \textbf{M03 (1958 Perceptron)}: 100\% accuracy on 4-point XOR-like linearly separable problem, demonstrating basic gradient descent convergence.
\item \textbf{M06 (1969 XOR Solution)}: 100\% accuracy on XOR classification within 20 epochs, proving multi-layer networks solve non-linear problems.
@@ -1026,6 +1032,7 @@ TinyTorch's CPU-only design prioritizes pedagogical transparency, but students b
While TinyTorch's design is grounded in established learning theory (cognitive load~\citep{sweller1988cognitive}, progressive disclosure, cognitive apprenticeship~\citep{collins1989cognitive}), its pedagogical effectiveness requires empirical validation through controlled classroom studies. We commit to the following validation roadmap:
\noindent\textbf{Phase 1: Pilot Deployment (Fall 2025, $n=30$--50 students)}
\begin{itemize}[leftmargin=*, itemsep=1pt, parsep=0pt]
\item \textbf{Institutions}: Deploy at 2--3 universities in introductory ML systems courses as primary hands-on framework alongside theory lectures.
\item \textbf{Cognitive load measurement}: Paas Mental Effort Rating Scale~\citep{paas1992training} administered after Modules 05 (autograd) and 09 (CNNs) to test progressive disclosure hypothesis---does dormant feature activation reduce cognitive load compared to introducing autograd as separate framework?
@@ -1034,6 +1041,7 @@ While TinyTorch's design is grounded in established learning theory (cognitive l
\end{itemize}
\noindent\textbf{Phase 2: Comparative Study (Spring 2026, $n=100$--150 students)}
\begin{itemize}[leftmargin=*, itemsep=1pt, parsep=0pt]
\item \textbf{Design}: Randomized controlled trial comparing TinyTorch (systems-first, build-from-scratch) versus PyTorch-only (application-first, use-existing-frameworks) versus lecture-only (control) across 3 sections of same ML course with identical theory content.
\item \textbf{Conceptual understanding}: ML systems concept inventory (adapted from program visualization assessment~\citep{sorva2012visual} for systems thinking) administered pre-course and post-course, measuring understanding of autograd mechanics, memory profiling, computational complexity, and optimization tradeoffs.
@@ -1042,6 +1050,7 @@ While TinyTorch's design is grounded in established learning theory (cognitive l
\end{itemize}
\noindent\textbf{Phase 3: Longitudinal Tracking (2026--2027, $n=200$+ students)}
\begin{itemize}[leftmargin=*, itemsep=1pt, parsep=0pt]
\item \textbf{Retention}: Re-administer concept inventory at 6 months and 12 months post-course to measure long-term retention of systems thinking---does implementation-based learning persist better than lecture-based learning?
\item \textbf{Advanced course performance}: Track TinyTorch cohort versus control group performance in subsequent ML systems courses (e.g., CMU Deep Learning Systems~\citep{chen2022dlsyscourse}, distributed training courses) to measure preparation effectiveness.