-
January 24, 2021 Pelonalysis - Peloton Data with Python/Pandas/Matplotlib
One year ago Peloton seemed like a niche workout fad that wouldn’t last. And then the pandemic hit. My wife easily convinced me that it would be worth the investment. I quickly became obsessed with pushing my limits and hitting new personal records.
Read more... -
May 20, 2018 Trains, planes, and automobiles
The recent disagreements (for example the face-off between Gary Marcus and Yann LeCun, or Gary’s recent NY Times article and the ensuing Twitter conversations, or Judea Pearl’s discussion of his new book) about whether we’re on the “right track” in AI research seem a little strange to me.
Read more... -
December 8, 2017 How about Software 1.5 instead?
I recently read Andrej Karpathy’s recent blog post proclaiming that we are entering an era of “Software 2.0”, where traditional approaches to developing software (a team of human developers writing code in their programming language of choice… i.e. v1.0) will become less prevalent and important.
Read more... -
December 2, 2017 Plots: Past, Present, and Future
Earlier this year, I backed away from the Julia community to pursue a full time opportunity with the exciting AI startup Elemental Cognition as a senior engineer. Elemental Cognition was founded by Dave Ferrucci, the AI visionary that led the original IBM Watson team to victory in Jeopardy. We’re a small team (though we’re hiring!) of talented and passionate researchers and engineers, some of whom were instrumental in the success of Watson, working to build machines with common sense and reasoning (thought partners, if you will). It’s incredibly interesting, but it also doesn’t leave time for hobbies.
Read more... -
December 3, 2016 Learning without Backpropagation: Intuition and Ideas (Part 2)
In part one, we peeked into the rabbit hole of backprop-free network training with asymmetric random feedback. In this post, we’ll jump into the rabbit hole with both feet. First I’ll demonstrate how it is possible to learn by “gradient” descent with zero-derivative activations, where learning by backpropagation is impossible. The technique is a modification of Direct Feedback Alignment. Then I’ll review several different (but unexpectedly related) research directions: targetprop, e-prop, and synthetic gradients, which set up my ultimate goal: efficient training of arbitrary recurrent networks.
Read more... -
November 22, 2016 Learning without Backpropagation: Intuition and Ideas (Part 1)
For the last 30 years, artificial neural networks have overwhelmingly been trained by a technique called backpropagation. This method is correct, intuitive, and easy to implement in both software and hardware (with specialized routines available for GPU computing). However, there are downsides to the method. It can cause practical instabilities in the learning process due to vanishing and exploding gradients. It is inherently sequential in design; one must complete a full sequential forward pass before computing a loss, after which you can begin your sequential backward pass. This sequential requirement makes parallelizing large networks (in space and/or time) difficult. Finally, it may be too conservative of a method to achieve our true goal: optimizing out-of-sample global loss. For these reasons, we explore the possibility of learning networks without backpropagation.
Read more... -
November 21, 2016 JuliaML Transformations: Internal Design
In this video post, I expand on my introduction to Transformations and show the core idea behind the design: namely that each transformation has a black-box representation of input, output, and (optionally) parameters which are vectors in contiguous storage. Julia’s excellent type system and efficient array views allow for very convenient and intuitive structures.
Read more... -
November 21, 2016 Plots Tutorial: Ecosystem and Pipeline
Plots is a complex and powerful piece of software, with features and functionality that many probably don’t realize. In this video tutorial, I try to explain where Plots fits into the Julia landscape and how Plots turns a simple command into a beautiful visualization.
Read more... -
November 15, 2016 Online Layer Normalization: Derivation of Analytical Gradients
Layer Normalization is a technique developed by Ba, Kiros, and Hinton for normalizing neural network layers as a whole (as opposed to Batch Normalization and variants which normalize per-neuron). In this post I’ll show my derivation of analytical gradients for Layer Normalization using an online/incremental weighting of the estimated moments for the layer.
Read more... -
November 14, 2016 Transformations: Modular tensor computation graphs in Julia
In this post I’ll try to summarize my design goals with the Transformations package for the JuliaML ecosystem. Transformations should be seen as a modular and higher-level approach to building complex tensor computation graphs, similar to those you may build in TensorFlow or Theano. The major reason for designing this package from the ground up lies in the flexibility of a pure-Julia implementation for new research paths. If you want to apply convolutional neural nets to identify cats in pictures, this is not the package for you. My focus is in complex, real-time, and incremental algorithms for learning from temporal data. I want the ability to track learning progress in real time, and to build workflows and algorithms that don’t require a gpu server farm.
Read more... -
November 11, 2016 Visualizing Graphs in Julia using Plots and PlotRecipes
In this short post, I hope to introduce you to basic visualization of graphs (nodes connected by edges) when using Plots in Julia. The intention is that Visualizing a graph is as simple as inputting the connectivity structure, and optionally setting a ton of attributes that define the layout, labeling, colors, and more. Nodes are markers, and edges are lines. With this understanding, we can apply common Plots attributes as we see fit.
Read more... -
October 6, 2016 Deep Reinforcement Learning with Online Generalized Advantage Estimation
Deep Reinforcement Learning, or Deep RL, is a really hot field at the moment. If you haven’t heard of it, pay attention. Combining the power of reinforcement learning and deep learning, it is being used to play complex games better than humans, control driverless cars, optimize robotic decisions and limb trajectories, and much more. And we haven’t even gotten started… Deep RL has far reaching applications in business, finance, health care, and many other fields which could be improved with better decision making. It’s the closest (practical) approach we have to AGI. Seriously… how cool it that? In this post, I’ll rush through the basics and terminology in standard reinforcement learning (RL) problems, then review and extend work in Policy Gradient and Actor-Critic methods to derive an online variant of Generalized Advantage Estimation (GAE) using eligibility traces, which can be used to learn optimal policies for our Deep RL agents.
Read more... -
September 23, 2016 Machine Learning and Visualization in Julia
In this post, I’ll introduce you to the Julia programming language and a couple long-term projects of mine: Plots for easily building complex data visualizations, and JuliaML for machine learning and AI. After short introductions to each, we’ll quickly throw together some custom code to build and visualize the training of an artificial neural network. Julia is fast, but you’ll see that the real speed comes from developer productivity.
Read more... -
February 5, 2016 Neurons are computers: The Computational Power of Dendrites
The human brain is composed of billions of computational units, called neurons. Neurons transmit information to each other through electrical pulses, or spikes. A common misrepresentation is that the neuron is the basic conputational building block; that spikes are transferred and integrated at the soma, and that axons and dendrites are simply a network of electrical cables connecting the neurons together. Treating the dendrite as cabling is convenient; the mathematics are simpler, and it’s easier to reason about the role of neurons, both individually and in groups. As we’ll see, this simplification is wrong, and it glosses over a critical computational component in our neural architecture.
Read more... -
January 13, 2016 Efficiency is Key: Lessons from the Human Brain.
The human brain is intensely complicated. Memories, motor sequences, emotions, language, and more are all maintained and enacted solely through the temporary and fleeting transfer of energy between neurons: the slow release of neurotransmitters across synapses, dendritic integration, and finally the somatic spike. A single spike (somatic action potential) will last a small fraction of a second, and yet somehow we are able to swing a baseball bat, compose a symphony, and apply memories from decades in the past. How can our brain be based on signals of such short duration, and yet work on such abstract concepts stretching vast time scales?
Read more...