Platform
Solutions
Resources
Pricing
Sign in
Sign up
Shubhanshu Mishra
Researcher in Machine learning, Data Mining, Social Science, and Natural Language Processing Programming languages: Python, Java, and Java Script
Workspace
Fork
Public
By
Shubhanshu Mishra
Edited
Oct 31, 2023
Insert cell
Insert cell
Insert cell
Insert cell
plot_array_multi
(
data
,
{
title
:
"Comparison of Softmax variants"
,
subtitle
:
"Online Softmax versus Safe Softmax"
,
caption
:
"Figure 1. Comparison of Softmax variants."
}
,
[
"online_softmax"
,
"safe_softmax"
,
"online_softmax_functional"
]
)
Insert cell
Insert cell
function
get_online_softmax
(
logits
)
{
let
max_val
=
-
Infinity
;
let
prev_max
=
max_val
;
let
Z
=
0
;
for
(
let
i
=
0
;
i
<
logits
.
length
;
i
++
)
{
max_val
=
Math
.
max
(
max_val
,
logits
[
i
]
)
;
Z
=
Z
*
Math
.
exp
(
prev_max
-
max_val
)
+
Math
.
exp
(
logits
[
i
]
-
max_val
)
;
prev_max
=
max_val
;
}
// console.log({ max_val, Z });
return
logits
.
map
(
(
x
)
=>
Math
.
exp
(
x
-
max_val
)
/
Z
)
;
}
Insert cell
function
online_softmax_reduction
(
state
,
logit
)
{
const
max_val
=
Math
.
max
(
state
.
max_val
,
logit
)
;
const
Z
=
state
.
Z
*
Math
.
exp
(
state
.
max_val
-
max_val
)
+
Math
.
exp
(
logit
-
max_val
)
;
return
{
max_val
:
max_val
,
Z
:
Z
}
;
}
Insert cell
online_softmax_state
=
logits
.
reduce
(
online_softmax_reduction
,
{
max_val
:
-
Infinity
,
Z
:
0
}
)
Insert cell
online_softmax_functional
=
logits
.
map
(
(
x
)
=>
Math
.
exp
(
x
-
online_softmax_state
.
max_val
)
/
online_softmax_state
.
Z
)
Insert cell
Insert cell
plot_array
(
safe_softmax
)
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
safe_softmax
.
map
(
(
x
,
i
)
=>
x
==
online_softmax
[
i
]
)
.
reduce
(
(
x
,
y
)
=>
x
&&
y
,
true
)
Insert cell
Insert cell
data
=
get_combined_data_from_object
(
{
safe_softmax
,
online_softmax
,
online_softmax_functional
}
)
Insert cell
function
get_combined_data_from_object
(
obj
)
{
return
Object
.
entries
(
obj
)
.
map
(
(
[
k
,
v
]
)
=>
v
.
map
(
(
x
,
i
)
=>
Object
(
{
index
:
i
,
val
:
x
,
source
:
k
}
)
)
)
.
reduce
(
(
x
,
y
)
=>
x
.
concat
(
y
)
,
[
]
)
;
}
Insert cell
[
1
,
2
,
3
]
.
indexOf
(
5
)
Insert cell
Insert cell
One platform
to build and deploy the best data apps
Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Try it for free
Learn more
Fork
View
Export
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
sample
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
get_online_softmax
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
online_softmax_reduction
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
online_softmax_state
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
online_softmax_functional
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Edit
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
safe_softmax
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
online_softmax
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
rng
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
logits
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
get_safe_softmax
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
plot_array
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
data
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
get_combined_data_from_object
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
Add comment
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML
plot_array_multi
Edit
Add comment
Copy import
Select
Duplicate
Copy link
Embed
Delete
JavaScript
Markdown
HTML