template <typename T>Tensor<T> forward(const Tensor<T>& x) { return relu(w_ * x + b_);}// backprop through the graphfor (int i = 0; i < n; ++i) grad[i] += lr * delta[i];auto net = std::make_unique<Net>();net->compile(Device::CUDA);double loss = cross_entropy(logits, y);loss.backward();optimizer.step();std::cout << "epoch " << e << "\n";constexpr float kEps = 1e-8f;template <typename T>Tensor<T> forward(const Tensor<T>& x) { return relu(w_ * x + b_);}// backprop through the graphfor (int i = 0; i < n; ++i) grad[i] += lr * delta[i];auto net = std::make_unique<Net>();net->compile(Device::CUDA);double loss = cross_entropy(logits, y);loss.backward();optimizer.step();std::cout << "epoch " << e << "\n";constexpr float kEps = 1e-8f;let mut grad = vec![0.0f32; n];data.par_iter().for_each(|s| { acc.fetch_add(s.w, Ordering::Relaxed);});impl Layer for Dense { fn step(&mut self, lr: f32) {}}let net = Net::builder().depth(12).build()?;let loss = cross_entropy(&logits, &y);println!("epoch {e} loss={loss:.4}");fn forward(&self, x: &Tensor) -> Tensor { relu(&self.w * x + &self.b)}// fold gradients in parallellet mut grad = vec![0.0f32; n];data.par_iter().for_each(|s| { acc.fetch_add(s.w, Ordering::Relaxed);});impl Layer for Dense { fn step(&mut self, lr: f32) {}}let net = Net::builder().depth(12).build()?;let loss = cross_entropy(&logits, &y);println!("epoch {e} loss={loss:.4}");fn forward(&self, x: &Tensor) -> Tensor { relu(&self.w * x + &self.b)}// fold gradients in parallelnet->compile(Device::CUDA);double loss = cross_entropy(logits, y);loss.backward();optimizer.step();std::cout << "epoch " << e << "\n";constexpr float kEps = 1e-8f;template <typename T>Tensor<T> forward(const Tensor<T>& x) { return relu(w_ * x + b_);}// backprop through the graphfor (int i = 0; i < n; ++i) grad[i] += lr * delta[i];auto net = std::make_unique<Net>();net->compile(Device::CUDA);double loss = cross_entropy(logits, y);loss.backward();optimizer.step();std::cout << "epoch " << e << "\n";constexpr float kEps = 1e-8f;template <typename T>Tensor<T> forward(const Tensor<T>& x) { return relu(w_ * x + b_);}// backprop through the graphfor (int i = 0; i < n; ++i) grad[i] += lr * delta[i];auto net = std::make_unique<Net>();let loss = cross_entropy(&logits, &y);println!("epoch {e} loss={loss:.4}");fn forward(&self, x: &Tensor) -> Tensor { relu(&self.w * x + &self.b)}// fold gradients in parallellet mut grad = vec![0.0f32; n];data.par_iter().for_each(|s| { acc.fetch_add(s.w, Ordering::Relaxed);});impl Layer for Dense { fn step(&mut self, lr: f32) {}}let net = Net::builder().depth(12).build()?;let loss = cross_entropy(&logits, &y);println!("epoch {e} loss={loss:.4}");fn forward(&self, x: &Tensor) -> Tensor { relu(&self.w * x + &self.b)}// fold gradients in parallellet mut grad = vec![0.0f32; n];data.par_iter().for_each(|s| { acc.fetch_add(s.w, Ordering::Relaxed);});impl Layer for Dense { fn step(&mut self, lr: f32) {}}let net = Net::builder().depth(12).build()?; return relu(w_ * x + b_);}// backprop through the graphfor (int i = 0; i < n; ++i) grad[i] += lr * delta[i];auto net = std::make_unique<Net>();net->compile(Device::CUDA);double loss = cross_entropy(logits, y);loss.backward();optimizer.step();std::cout << "epoch " << e << "\n";constexpr float kEps = 1e-8f;template <typename T>Tensor<T> forward(const Tensor<T>& x) { return relu(w_ * x + b_);}// backprop through the graphfor (int i = 0; i < n; ++i) grad[i] += lr * delta[i];auto net = std::make_unique<Net>();net->compile(Device::CUDA);double loss = cross_entropy(logits, y);loss.backward();optimizer.step();std::cout << "epoch " << e << "\n";constexpr float kEps = 1e-8f;template <typename T>Tensor<T> forward(const Tensor<T>& x) {Welcome, my name is Ali Hariri Movahed.Known as code by Mov.
I'm a computer scientist based between the USA and Germany.ML researcher, software developer, and builder.
Latest news
All news & posts →Starting a news feed on mov.dev
mov.dev now has a news feed: short updates on talks, papers and releases, plus longer write-ups, all in one place.
Update
Phantom Non-Identifiability accepted at Sim2Science, NeurIPS 2026
Simplifying a model can make it invent problems that don't exist. My paper on this was accepted at the Sim2Science workshop at NeurIPS 2026 in Paris.
Update
In brief
I'm a research assistant at the Max Planck Institute for Intelligent Systems, working with Shashank Tripathi in Michael J. Black's Perceiving Systems department on agentic game development with LLMs.
I'm finishing a BSc in Computer Science and a BSc in Mathematics at RWTH Aachen University, both in late 2026. During a leave of absence I co-founded Noboru AI, an AI-native website agency built around an autonomous agent whose every change a human approves.
I also did applied-ML research at RWTH's ITA and WZL institutes. My paper Phantom Non-Identifiability, on how simplifying a coupled simulator can fabricate limits that don't exist, was accepted at the Sim2Science workshop at NeurIPS 2026 in Paris.
Now
- Research Assistant, Max Planck Institute for Intelligent Systems — agentic game development with LLMs
- BSc Computer Science & BSc Mathematics, RWTH Aachen — finishing late 2026
- Software Engineer, EFAB AI Labs
Highlights
- ▸“Phantom Non-Identifiability” accepted at the Sim2Science workshop, NeurIPS 2026 in Paris
- ▸Co-founded Noboru AI, an AI-native website agency with a human-approved agent
- ▸MOV 9000: an on-site AI you can talk to, by text or voice