Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Weights are kind of like a compiled binary, because they are an incomprehensible blob of bits. But they are also unlike a compiled binary, because they can be fine-tuned.


GPL defines "source code" as "the preferred form of the work for making modifications to it", which certainly describes the weights.


Training being a one-way function that drops knowledge should tell you that the weights are not the form you want to start with.

This is like saying, hey, a regular binary executable is fine because I can edit it with hexl-mode.


If hexl-mode on the binary works on my home PC but compiling the source code costs me millions of dollars in compute then I want the binary. Someone with millions of dollars to spend on compute may have a differing opinion.


This argument only barely holds water for those big SOTA models like llama derivatives, and that's only because of practical costs involved.

Or should I say, it held water until few days ago.

Personally though, I never bought it. Saying that weights are the "preferred form of the work for making modifications to it" because a) approximately no one can afford to start with the training data, and b) fine-tuning and training LoRAs are cheap enough, is basically like saying binary blobs are "open source" as long as they provide an API (or ABI) for other programs to use. By this line of reasoning, NVIDIA GPU stack and Broadcom chipset firmware would qualify as open source, too.


I just don't think analogies to open source are useful in any direction. This is its own beast and we should just think about what we want out of it.


If we are able to look back at this comment in a year or two, you will chuckle.


So, as you state yourself basically, the result also depends on training data, which makes it part of the "compiled source" in a way, just like the architecture of the model. If you have the training data, you can modify that.

But probably it is impossible for them to release the training data, as they have probably not made it all reproducible, but live ingested the data, and the data has since then chanced in many places. So the code to live ingest the data becomes the actual source, I guess.


Cost of building is a true concern, but it doesn't stop people from forking large open projects like Chrome or Firefox and try to build a project to pursue their own ideas and be able to contribute back to the upstream projects when it makes sense.

I don't build my browser, it's too expensive, but the cost of building has nothing to say with how open the access to things. It'd be cool if the community could fork the project, propose changes and maybe crowdfund a training/build run to experiment.



I've fine-tuned compiled binaries on occasion. It used to be a common pastime among teenagers; that's where the demoscene came from.


You can decompile binaries.

You can also edit binaries by hand.


Comparing fine tuning to editing binaries by hand is not a fair comparison. If I could show the decompiler some output I liked and it edited the binary for me to make the output match, then the comparison would be closer.


> If I could show the decompiler some output I liked and it edited the binary for me to make the output match, then the comparison would be closer.

That's fundamentally the same thing though - you run an optimization algorithm on a binary blob. I don't see why this couldn't work. Sure, a neural net is designed to be differentiable, while ELF and PE executables aren't, but then backprop isn't the be-all, end-all of optimization algorithms.

Off the top of my head, you could reframe the task as a special kind of genetic programming problem, one that starts with a large program instead of starting from scratch, and that works on an assembly instead of an abstract syntax tree. Hell, you could first decompile the executable and then have the genetic programming solver run on decompiled code.

I'd be really surprised if no one tried that before. Or, if such functionality isn't already available in some RE tools (or as a plugin for one). My own hands-on experience with reverse engineering is limited to a few attempts at adding extra UI and functionality to StarCraft by writing some assembly, turning it into object code, and injecting it straight into the running game process[0] - but that was me doing exactly what you described, just by hand. I imagine doing such things is common practice in RE that someone already automated finding the specific parts of the binary that produce the outputs you want to modify.

--

[0] - I sometimes miss the times before Data Execution Prevention became a thing.


Grab an AI model and keep going.


I feel like a lot of people in this thread have never done continued training on an LLM and it shows.

Seriously, a set of weights that already works really well is basically the ideal basis for a _lot_ of ML tasks.


The question is not, whether it is ideal to do some ML tasks with it, the question is, whether you can do the things you could typically do with open sourced software, including looking at the source and build it, or modify the source and build it. If you don't have the original training data, or mechanism of getting the training data, the compiled result is not reproducible, like normal code would be, and you cannot make a version saying for example: "I want just the same, but without it ever learning from CCP prop."


With regard to the argument about open source, it’s pretty much the same.

Especially with dynamically linked binaries like many games.


It is a fair comparison. Normal programming takes inputs and a function and produces outputs. Deep learning takes inputs and outputs and derives a functions. Of course the decompilers for traditional programs do not work on inputs and outputs, it is a different paradigm!


Ghidra (https://ghidra-sre.org/) can fine-tune executables way more easily than your models.


Actually it can't, you can fine tune models with training data, parameters, time and compute, ghidra won't "fine-tune" anything for you.


How hard can it be to wrap it in a loop and apply some off-the-shelf good old fashioned AI^H^H optimization technique?

"Given specific inputs X and outputs Y, have a computer automatically find modifications to F so that F(X) gives Y" is a problem that's been studied for nearly a century now (longer, if relax the meaning of "computer"), with plenty of well-known solutions, most of which don't require F to be differentiable.

Isn't "operational research" a standard part of undergrad CS curriculum? It was at my alma mater.


There's billions of dollars at the end of the rainbow you're gesturing towards




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: