Recent submissions

Comment · 1 day ago
I wonder what the implementation actually adds over the idea itself. At least part of the appeal of these kinds of projects used to be "wow, someone was actually crazy/eccentric/obsessive enough to go through the effort to do this".

If the idea is clearly feasible, and it's just a question of putting in the work, then what is the point of having an LLM actually do it?

I feel it ends up being no better than a post saying "imagine if...", to the mild amusement of the reader, so essentially it ends up as an instance of "just show me the prompt".

Comment · 11 days ago
Comment · 2 months ago
A question out of honest curiosity: Would you say that it is unknown whether any humans have subjective experiences, or just any humans outside yourself? I've seen the former view being expressed previously and can't wrap my mind around it.
Comment · 3 months ago
Mere mortals can only aspire to this blissful and perfect alignment between normative stance and immediate self-interest.
Comment · 5 months ago
Comment · 6 months ago
Here are a few made by upscaling and then manually cleaning up classic fonts: https://github.com/B2HDPI/B2HDPI

The glyph coverage is enough for most programming languages; missing glyphs just fall back to a pixelized look.

Lode 1.5x works really well at 110 ppi displays, which seems to be the uncanny valley for antialiasing.

Comment · 7 months ago
Comment · 9 months ago
Wow, they finally figured out that it's actually not A, it's B—at least if C.
Comment · 2 years ago
If you're able to predict the future with 50% accuracy, you should start filling out some lottery tickets.
Comment · 2 years ago
The convolution is approximated via a form of sampling with additional bookkeeping at each encountered branch. How well that scales for deeply branching programs depends on the probabilities of the branches and the diversity in the output on the resulting paths, the worst case being a program where all branches are equally likely and each path generates an entirely different output (as in a hash function, for example). In practice, we've been dealing with problems involving up to tens of thousands of branches or so.

We've haven't done a direct comparison to MCMC approaches yet, but it's on the Todo list. My intuition is that MCMC will win out for problems where finding "just any" local optimum is not good enough.

Comment · 2 years ago
In DiscoGrad, smoothing would be applied by adding Gaussian noise with some configurable variance to x and running the program on those x's. The gradient would then be calculated based on the branch condition's derivative wrt. x (which is 1) and an estimate of the distribution of the condition (which is Gaussian).

In this specific example, the smoothed derivative happens to be exactly the Gaussian cumulative distribution function, so the user could just replace the program with that function. However, for more complex programs, it'd be hard to find such correspondences manually.

Comment · 2 years ago
Comment · 2 years ago
Well, the most common ML problems can be expressed as optimization over smooth functions (or reformulated that way manually). We might have to convince the ML world that branches do matter :) On the other hand, there are gradient-free approaches that solve problems with jumps in other ways, like many reinforcement learning algorithms, or metaheuristics such as genetic algorithms in simulation-based optimization. The jury's still out on "killer apps" where gradient descent can outperform these approaches reliably, but we're hoping to add to that body of knowledge...
Comment · 2 years ago
Great point, the sigmoid approximation works well for certain problems and that's in fact what I used in the exploratory papers that lead to this work. The downsides are the lack of a clear interpretation how the original program and its smooth counterpart are related, and the difficulty of controlling the degree of smoothing as programs get longer. What DiscoGrad computes has a statistical interpretation: it's the convolution of the program output with whatever distribution is used for smoothing, typically a Gaussian with a configurable variance.

On top of that, if the program branches on random numbers (which is common in simulations), that suffices for the maths to work out and you get an estimate of the asymptotic gradient (for samples -> infinity) of the original program, without any artificial smoothing.

So in short, I do think it is slightly fancier :)

Comment · 2 years ago
That's right, plain autodiff just ignores branches. Our canonical "why is this even needed" example is a program like "if (x >= 0) return 1; else return 0", x being the input.

The autodiff derivative of this is zero, wherever you evaluate it, so if you sample x and run your program on each x as in a classical ML setup, you'd be averaging over a series of zero-derivatives. This is of course not helpful to gradient descent. In more complex programs, it's less blatant, but the gist is that just averaging sampled gradients over programs (input-dependent!) branches yields biased or zero-valued derivatives. The traffic light optimization example shown on Github is a more complex example where averaged autodiff-gradients are always zero.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton