‘The’ Sigmoid Function

A standard function in data science is the sigmoid function:

sigmoid(z) = 1 / (1 + e^-z)`.

This function will:

  • as z approaches infinity, asymptotically approach 1;
  • as z approaches negative infinity, approach 0; and
  • be 0.5 if z is 0.

I believe any number can stand in the place of e in the formula for this function, and the three results above will be enjoyed. However, the smaller that number, the more slowly the result will approach limits.

Hoon Code

I found a bug. Do not use this code in Production.

The steps of including code from other files, and calling gates from included code, is correct.

The problem seems to be in exp:lazytrig. It seems to work for negative integers from -1 to -9, but hangs with -10.

I’m looking into it.

FWIW.

/+  lazytrig  :: From ~lagrev-nocfep, https://github.com/sigilante/lazytrig
|%
++  e-to-the
  :: Helper function to keep final function neater.
  |=  x=@rs  ^-  @rs
  (pow:lazytrig e:lazytrig x)

++  neg
  :: Helper function to keep the final function neater.
  |=  x=@rs
  (mul:rs .-1 x)

++  sigmoid
  :: 1 / (1 + e^-z)
  :: z large neg, approaches 0
  :: z == 0, 0.5
  :: z large pos, approaches 1
  |=  z=@rs  ^-  @rs
  (div:rs .1 (add:rs .1 (e-to-the (neg z))))
--

Using the Code

To use the code from dojo

Boot a fake planet.

I’d be daft to risk my home planet on sketchy code.

bash $ ./urbit zod

(a lot of line melody)

~zod:dojo>

Save code in your pier

Save lazytrig.hoon (created by ~lagrev-nocfep, and available at https://github.com/sigilante/lazytrig) in the /lib/ directory of your pier.

Save the code above in some foo.hoon file, also in /lib/.

In dojo:

~zod:dojo>  |commit %home :: load your new code from your pier into your ship.
>=
: /~zod/home/1.869/lib/lazytrig/hoon
: /~zod/home/1.869/lib/foo/hoon

Note: The 1.869 will probably be different. I believe it is an event counter.

Get the code into your dojo.

~zod:dojo> =dojofoo -build-file %/lib/sigmoid/hoon

The response should be:

> =dojofoo -build-file %/lib/sigmoid/hoon

Test

> =dojofoo -build-file %/lib/sigmoid/hoon
> (sigmoid:dojofoo .-9000000000)
.5.693553e-38
> (sigmoid:dojofoo .9000000000)
.8.5067096e-38
> (sigmoid:dojofoo .0)
.5e-1

Success!

I’ve enjoyed my time here!

You all have been so wonderful!

It’s never to soon to start learning Hoon!

See you on Mars!

~habnus-dovres


I suggest taking the in-person (and archived) class: Beginning Hoon or Hoon 101.

https://hooniversity.org/enroll/

Hoon is a functional, typed language. Using Hoon, we can write gates that can run directly on Arvo, the Urbit OS.

Hoon School Teaches Many Things

  • How to write and use gates
  • Some data types
  • Recursion
  • More

Maybe of interest:

My code: https://github.com/gptix/hoon/tree/master/libs

Urbit Overview https://youtu.be/M04AKTCDavc

Hooniversity: https://hooniversity.org/

Hoon School: https://hooniversity.org/enroll/

Urbit / Hoon Docs: https://urbit.org/docs/reference/

Buy a planet:

Catch a comet: https://urbit.org/docs/glossary/comet/

Tlon: https://tlon.io/

Once you get on Urbit, join:

~bitbet-bolbel/urbit-community

~hiddev-dannut/new-hooniverse